/**************************************************
 * 
 * 全局初始化 - Global Init...
 * 
 **************************************************/

// 根据ID获取对象 - get object by id
var g = function(o) {return document.getElementById(o);}

// 产生 n 以内的随机整数 - return a random number by '@n' that rounded to integer.
var randBy = function(n) {return Math.round(Math.random() * n);}

// 产生 max, min 之间的随机整数 - renturn a random number between '@max' and '@min' that rounded to integer.
var randIn = function(max,min) {return Math.round(Math.random()*(max-min)+min);}

// 以“一个中文字符 = 两个英文空格”返回总长度 - make chinese Chars as "  " 2 letters and return the length.
var cnreg = new RegExp(/[^\x00-\xff]/g);
var cnLength = function() { return this.replace(/[^\x00-\xff]/g, "  ").length;}

/* 
 * 阻止浏览器默认事件 - prevent Default Event
 * @param Event Object
 * example: window.onload = function(){	document.getElementById("baidu").onclick = function(e){	preventDefault(e);}; };
 */
var preventDefault = function(e) { 
	(e && e.preventDefault) ? e.preventDefault() : event.returnValue=false;
}
/*
 * 得到XMLHttpRequest
 * @return XMLHttpRequest Object
 * example: var xhr = getXHR();
 */
//var gXHR = function(){ return window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');}
var getXHR = function(){
	var x;
	try{
		x = new XMLHttpRequest();
	}catch (e){
		try{
			x = new ActiveXObject("Msxml2.XMLHTTP");
		}catch (e){
			try{
				x = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e){
				alert("Do not support AJAX！");
				return false;
			}
		}
	}
	return x;
}

/*
 * 图片按比例自适应缩放
 * @param img {Element} 用户上传的图片
 * @param maxWidth {Number} 预览区域的最大宽度
 * @param maxHeight {Number} 预览区域的最大高度
 */
var resizeImg = function(img, maxWidth, maxHeight){
	var w = img.width, h = img.height;
	// 当图片比预览区域小时不做任何改变
	if(w < maxWidth && h < maxHeight) return;

	// 当实际图片比例大于预览区域宽高比例时
	// 缩放图片宽度，反之缩放图片宽度
	w/h > maxWidth/maxHeight  ? img.width = maxWidth : img.height = maxHeight;
};

/**************************************************
 * 加入收藏，设为首页
 * example：
 * <a href="#" onclick="setHomepage(window.location); return false;">设为首页</a>
 * <a href="#" onclick="addFavorite(window.location,document.title); return false;">加入收藏</a>
 * <a href="javascript:" onclick="javascript:if(document.all){window.external.addFavorite(window.location.href, '随时随地分享身边的新鲜事儿');}else if(window.sidebar){window.sidebar.addPanel('随时随地分享身边的新鲜事儿', window.location.href, '');}">加入收藏</a>
 **************************************************/
function addFavorite(sURL, sTitle) {	
    try {window.external.addFavorite(sURL, sTitle);}
	catch (e) {
		try {window.sidebar.addPanel(sTitle, sURL, "");}
		catch (e) {
			alert('怎么收藏不了？告诉你一个小秘诀，使用 [ Ctrl + D ] 就可以添加到收藏夹了！');
        }
    }
}
function setHomepage(sURL) {
	if (document.all) {document.body.style.behavior = 'url(#default#homepage)';document.body.setHomePage(sURL);}
	else if (window.sidebar) {
		if (window.netscape) {
			try {netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");}
			catch (e) {
				alert("该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入 about:config, 然后将项 signed.applets.codebase_principal_support 值改为 true");
			}
		}
		var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
		prefs.setCharPref('browser.startup.homepage', sURL);
	}
}
/**************************************************
 * 复制
 * @param copyId	要复制的元素id
 **************************************************/
function copy(copyId){
    var sCdKey = document.getElementById(copyId).innerText;
    if(window.clipboardData){
        window.clipboardData.clearData();
        window.clipboardData.setData("Text", sCdKey);
        alert("复制成功");
    }
    else if(window.netscape){
        try{
             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
             var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
             if (!clip){ return false;}
             var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
             if (!trans) {return false;}
             trans.addDataFlavor('text/unicode');
             var str = new Object();
             var len = new Object();
             var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
             var copytext = document.getElementById(copyId).text;
             str.data=copytext;
             trans.setTransferData("text/unicode",str,copytext.length*2);
             var clipid=Components.interfaces.nsIClipboard;
             if (!clip) {
                return false;
             }
             clip.setData(trans,null,clipid.kGlobalClipboard);
             alert("复制成功");
        }
        catch(e){
             alert("由于浏览器的安全限制，请使用 [ Ctrl + C ] 手动复制此内容。");
             return false;
        }
    }
}

/*
 *  URL解析
 */
function parseURL(url) {
	var a =  document.createElement('a');
	a.href = url;
	return {
		source: url,
		protocol: a.protocol.replace(':',''),
		host: a.hostname,
		port: a.port,
		query: a.search,
		params: (function(){
		var ret = {},
		seg = a.search.replace(/^\?/,'').split('&'),
		len = seg.length, i = 0, s;
		for (;i<len;i++) {
		if (!seg[i]) { continue; }
		s = seg[i].split('=');
		ret[s[0]] = s[1];
		}
		return ret;
		})(),
		file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
		hash: a.hash.replace('#',''),
		path: a.pathname.replace(/^([^\/])/,'/$1'),
		relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
		segments: a.pathname.replace(/^\//,'').split('/')
	};
}

/*
 * 功能：滚动条缓动
 * @param [HTML ELEMENT Object] 要缓动的对象
 * @param [Object] option缓动参数
 * 用法：
	window.onload = function () {
		var div1 = document.getElementById("div1");
		new SmoothScroll(div1);

		var div2 = document.getElementById("div2");
		new SmoothScroll(div2, {f:0.2});
	}
 */
var SmoothScroll = function (win, opt) {
	//操作对象
	this.win = win;
	//每次滚动位移
	this.step = opt ? opt.step || 180 : 180;
	//缓动系数
	this.f = opt ? opt.f || 0.1 : 0.1;
	this.interval = 10;
	this.intervalID = null;
	this.isFF = navigator.userAgent.toLowerCase().indexOf("firefox")>=0;
	this.upOrDown = "";
	this.init();
}
SmoothScroll.prototype = {
	init: function () {
		var _this = this;
		if (_this.isFF) {
			_this.win.addEventListener('DOMMouseScroll', function (e) {
				_this.upOrDown = e.detail < 0 ? "up" : "down";
				_this.scrollHander();
				e.preventDefault();
			}, false);
		} else {
			_this.win.onmousewheel = function (e) {
				e = e || window.event;
				_this.upOrDown = e.wheelDelta > 0 ? "up" : "down";
				_this.scrollHander();
				e.returnValue = false;
			}
		}
	}
	, scrollHander: function () {
		var _this = this;
		clearInterval(_this.intervalID);
		//目标位置
		var tar = _this.win.scrollTop + _this.step * (_this.upOrDown == "up" ? -1 : 1);
		_this.intervalID = setInterval(function () {
			//缓动
			_this.win.scrollTop += (tar - _this.win.scrollTop) * _this.f;
			if (tar == _this.win.scrollTop) {
				clearInterval(_this.intervalID);
			}
		}, _this.interval);
	}
}
