﻿/*************************/
//
//  Common.js
//  Fdream
//  2008/2/12
//  some common functions
//
/*************************/

// judge the browser type
/*
var isIE = 1 && (window.ActiveXObject);
var userAgent = navigator.userAgent.toLowerCase();
var browser = {
                version: (userAgent.match(/.+(?:rv|it|ra|ie)[/: ]([d.]+)/) || [])[1],
                safari: /webkit/.test(userAgent),
                opera: /opera/.test(userAgent),
                msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
                mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
            };
*/

// Break word
function BreakWord(str, intLen){  
	var strTemp = '';
	if ((browser.mozilla || browser.opera) && str.length > intLen) {
		while(str.length > intLen){ 
			strTemp += str.substr(0,intLen)+" ";
			str = str.substr(intLen, str.length);
		} 
		str = strTemp + str;
	}
	
	document.write(str);
} 

// Post a form
var postSubmited = false;
function CtrlEnter(evt) 
{
	if(postSubmited == false && (evt.ctrlKey && evt.keyCode == 13) || (evt.altKey && evt.keyCode == 83)) 
	{
		postSubmited = true;
		PostForm();
	}
}

// Escape regular expression
function EscapeRegExp(text) {
  if (!arguments.callee.sRE) {
    var specials = [
      '/', '.', '*', '+', '?', '|',
      '(', ')', '[', ']', '{', '}', '\\'
    ];
    arguments.callee.sRE = new RegExp(
      '(\\' + specials.join('|\\') + ')', 'g'
    );
  }
  return text.replace(arguments.callee.sRE, '\\$1');
}

// Escape html code
function EscapeHTML(str)
{
    var htmlChars=[ '&~&amp;', '<~&lt;', '>~&gt;'];
    var r;
    if(str){
        for(var i=0; i<htmlChars.length; i++) 
        {
            r = htmlChars[i].split('~');
            if(str.indexOf(r[0]) > -1)
            {
                str = str.replace(new RegExp(r[0], 'g'), r[1]);
                //str = str.replace(new RegExp(EscapeRegExp(r[0]), 'g'), r[1]);
            }
       }
  }
   return str;
}

// recover html tags
function RestoreHTML(str)
{
    var htmlChars=[ '&amp;~&', '&lt;~<', '&gt;~>'];
    var r;
    if(str){
        for(var i=0; i < htmlChars.length; i++) 
        {
            r = htmlChars[i].split('~');
            if(str.indexOf(r[0]) > -1)
            {
                str = str.replace(new RegExp(r[0], 'g'), r[1]);
                //str = str.replace(new RegExp(EscapeRegExp(r[0]), 'g'), r[1]);
            }
       }
  }
   return str;
}

CodeOperator={
    // copy text to clip
    copyText: function (txt) {
        if(isIE) {
            window.clipboardData.clearData();
            window.clipboardData.setData("Text", txt);
            alert("代码已复制到剪切板，可按Ctrl+V粘贴！");
            document.body.scrollTop=0;
        }
        else if(navigator.userAgent.indexOf("Opera") != -1) {
            window.location = txt;
        }
        else if (window.netscape) {
            try {
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            }
            catch (e) {
                alert("被浏览器拒绝！\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");
            }
            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 = txt;
                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("代码已复制到剪切板，可按Ctrl+V粘贴！");
        }
        else{
            alert('在此浏览器下不能自动复制，请手动复制！');
        }
        
        return false;
    },

    // clear html tags
    clearTags: function (txt)
    {
	    var pattern = /&nbsp;/img;
	    txt =txt.replace(pattern, ' ');
	    pattern = /&quot;/img;
	    txt =txt.replace(pattern, '"');
	    pattern = /<\/?span.*?>/img;
	    txt =txt.replace(pattern, '');
	    pattern = /<br[\s/]*>/img;
	    txt =txt.replace(pattern, '\r\n');
	    pattern = /&lt;/img;
	    txt =txt.replace(pattern, '<');
	    pattern = /&gt;/img;
	    txt =txt.replace(pattern, '>');
	    var pattern = /&amp;/img;
	    txt =txt.replace(pattern, '&');
    	
	    return txt;
    },

    // copy code
    copyCode: function (obj){
        this.copyText($(obj).get('text'));
	    //var txt = $(obj).innerHTML;
	    //CopyText(ClearTags(txt));
        /*
	    if(isIE && obj.style.display != 'none') {
	        var rng = document.body.createTextRange();
	        rng.moveToElementText($(obj));
	        rng.scrollIntoView();
	        rng.select();
	        rng.execCommand("Copy");
	        rng.collapse(false);
	    }
	    */
	    
	    return false;
    },

    // execute code
    execCode: function (obj){
        var winname = window.open('', "_blank", '');
        winname.document.open('text/html', 'replace');
	    winname.opener = null;
	    winname.document.write($(obj).get('text'));
        //winname.document.write(isIE ? $(obj).innerText : ClearTags($(obj).innerHTML));
        winname.document.close();
        
        return false;
    },

    // save code
    saveCode: function (obj) {
        var winname = window.open('', '_blank', 'top=10000');
        winname.document.open('text/html', 'replace');
	    winname.document.write($(obj).get('text'));
        //winname.document.write(isIE ? $(obj).innerText : ClearTags($(obj).innerHTML));
        winname.document.execCommand('saveas','','code.htm');
        winname.close();
        
        return false;
    }
};

window.addEvents({
    'domready': function(){
        $$('div.code_head').each(function(el){
            var cid= el.getProperty('cid');
            el.getElements('a').each(function(a){
                var action = a.getProperty('action');
                switch(action){
                    case 'run':
                    case 'exec':
                        a.addEvent('click', function(){
                            CodeOperator.execCode($('code' + cid));
                            return false;
                        });
                        break;
                    case 'copy':
                        a.addEvent('click', function(){
                            CodeOperator.copyCode($('code' + cid));
                            return false;
                        });
                        break;
                    case 'save':
                        a.addEvent('click', function(){
                            CodeOperator.saveCode($('code' + cid));
                            return false;
                        });
                        break;
                }
            })
        });
    }
});

// redirect automaticly
var autoInterval = 0;
var autoObjId;
var autoSeconds = 0;
var autoUrl;
function AutoRedirect(objId, seconds)
{
    //alert(seconds);
    autoObjId = objId;
    autoSeconds = seconds;
    if(arguments.length==3)
    {
        autoUrl = arguments[2];
    }
    autoInterval = setInterval(TimeCount, 1000);
}

function TimeCount()
{
    if(autoSeconds <= 0)
    {
        if(autoUrl != null)
        {
            location.href = autoUrl;
        }
        else
        {
            history.go(-1);
        }
        clearInterval(autoInterval)
    }
    else
    {   
        if($(autoObjId) != null)
        {
            $(autoObjId).innerHTML = autoSeconds;
        }
        autoSeconds--;
    }
}