/**
* 工具方法
* @version 1.00, 08/7/2
* @author Mike
*/

/**
* 转换字符串的回车和空格信息为WEB显示形式．
* @param str 需要处理的字符串.
* @return 空格或者回车转换完成的字符串.
*/
function convert(str){
    if (str!=""){
        str=str.replace(/\n/g,"<br>");
        str=str.replace(/\s/g,"&nbsp;");
    }
    return str;
}

/**
* 将给定的元素的链接地址改变为src.
* @param element 需要转换的元素id值
* @param src url的值
*/
function changeSrc(element, src) {
    var ifr = document.getElementById(element);
    ifr.src=src;
}

/**
* 提交指定的表单
* @param formName 表单的id值.
*/
function submitForm(formName) {
    document.getElementById(formName).submit();
}

/**
* 判断游览器类型"FIRE"为FireFox,IE为IE,UNKNOW为未知。
* @return "FIRE"为FireFox,IE为IE,UNKNOW为未知
*/
function checkBrowerType() {
    if (window.navigator.userAgent.indexOf("MSIE")>=1) {
        return "IE";
    } else if (window.navigator.userAgent.indexOf("Firefox")>=1) {
    return "FIRE";
} else {
return "UNKNOW";
}
}

/**
* iframe的自适应方法
* @param frameName 需要自适应的元素id值
*/
function reinitIframe(frameName) {
    var iframe = document.getElementById(frameName);
    
    try{
        
        var bHeight = iframe.contentWindow.document.body.scrollHeight;
        
        var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
        
        var height = Math.max(bHeight, dHeight);
        
        //alert(bHeight + " " + dHeight + " " + height);
        
        var type = checkBrowerType();
        
        //alert(type);
        if ("IE" == type) {
            iframe.height = bHeight;
        } else if ("FIRE" == type) {
        iframe.height=dHeight;
    } else {
    iframe.height =  height;
}

var bWidth = iframe.contentWindow.document.body.scrollWidth;

var dWidth = iframe.contentWindow.document.documentElement.scrollWidth;

var width = Math.max(bWidth,dWidth);

iframe.width = width;

}catch (ex){}

}

/**
* 判断给定字符串是数字，字母，汉字。
* @param str 需要检查的字符串
* @return 分别对应0,1,2,不在范围之内的返回-1.
*/
function checkStr(str) {
    var regNumber = /^\d+$/;
    var regPho = /^[A-Za-z]+$/;
    var regChar = /[\u4e00-\u9fa5]/;
    
    if (regNumber.exec(str)) {
        return 0;
    } else if (regPho.exec(str)) {
    return 1;
} else if(regChar.exec(str)) {
return 2;
} else {
return -1;
}
}

/**
* 设置指定名称元素为当前焦点。
* @param elementName 需要设为焦点的元素id值.
*/
function setFocus(elementName) {
    var element = document.getElementById(elementName);
    element.focus();
}

/**
* 修改目标CSS为指定CSS，并修改旧有对象的CSS为指定CSS
* @param targetName 目标元素的id值
* @param targetCssName 当前目标元素的样式表名称
* @param oldTargetNames 其他元素id值的组合字符串，两个id值以','分隔
* @param oldTargetCssName 其他元素的样式表名称
*/
function changeCss(targetName, targetCssName, oldTargetNames, oldTargetCssName) {
    
    var target = document.getElementById(targetName);
    target.className = targetCssName;
    
    var regexp = /,/;
    var oldTargetNamesArray = oldTargetNames.split(regexp);
    
    var oldTarget;
    for (var i=0; i < oldTargetNamesArray.length; i++) {
        oldTarget = document.getElementById(oldTargetNamesArray[i]);
        oldTarget.className = oldTargetCssName;
    }
}

/**
* 所有页面子菜单染色,根据连接URL确定染色点,URL必须是是.do后辍结束。
* 例如http://www.etnetchina.com/EtnetChinaShow/company_divann.do?code=42&type=12
* 的解析过程是去掉从"?"号开始的后面所有字符，再去掉"."字符串和最后找到一"/"之前的所有字符串。
* 以得到的名称分别加上"A"和"S"构成元素ID名称，改变其CSS属性。
* @param hrefLines 当前页面的url地址
*/
function dyeSubMenu(hrefLines) {
    var poss = findUriName(hrefLines);
    
    var find =poss.indexOf("_");
    var names;
    if (find > 0) {
        find = poss.indexOf("-");
        if (find > 0) {
            names = poss.substring(0,find);
        } else {
        names = poss;
    }
}

var menuElemAs = document.getElementById(names + "A");
var menuElemSs = document.getElementById(names + "S");

menuElemAs.style.cssText = "background-position:0% -25px;";

menuElemSs.style.cssText = "background-position:100% -25px;color:#FFFFFF";
}

/**
* 获取给定URL字符串的名称
* e.g. http://www.etnetchina.com/EtnetChinaShow/news.do?pageNumber=1&pageSize=10
* 处理结果是news
* @param url url字符串
* @return url的名称字符串。
*/
function findUriName(url) {
    var nowStr = url;
    //去除参数,?以后的字符串包括?
    var findElem = nowStr.lastIndexOf("?");
    if (findElem > -1) {
        nowStr = nowStr.substring(0,findElem);
    }
    
    findElem = nowStr.lastIndexOf(";jsessionid");
    if (findElem > -1) {
        nowStr = nowStr.substring(0,findElem);
    }
    //去掉最后一个"."之后的所有字符串包括"."
    findElem = nowStr.lastIndexOf(".");
    if (findElem > -1) {
        nowStr = nowStr.substring(0,findElem);
    }
    
    //去掉最后一个"/"之前的所有字符串,包括"/"
    findElem = nowStr.lastIndexOf("/");
    if (findElem > -1) {
        nowStr = nowStr.substring(findElem+1, nowStr.length);
    }
    
    return nowStr;
}

/**
* 获取给定完整URL中,指定参数名称的参数值．
* @param url url字符串
* @param paramName 参数名称
* @return 指定参数的值，如果没有将返回null.
*/
function findParamValue(url,paramName) {
    var nowStr = url;
    //查询参数开始字符"?"的位置
    var findElem = nowStr.indexOf("?");
    //只处理找到的情况
    if (findElem > -1) {
        //去掉"?"之前的所有字符,包括"?"
        nowStr = nowStr.substring(findElem+1,nowStr.length);
        
        //把参数字符串按"&"分隔成每一个元素都是"paramName=paramValue"样式的字符串数组
        var paramLimitRegExp = /&/;
        var params = nowStr.split(paramLimitRegExp);
        
        //分隔参数名称和值的表达式
        var paramValueLimitRegExp = /\=/;
        
        if (params.length <= 0) {
            //参数字符串数组数量为0,结果操作返回空.
            return null;
        } else {
        for (var count=0; count < params.length; count++) {
            var paramStr = params[count];
            //将参数名称和值以"="为界分隔成数组
            var paramNameAndValue = paramStr.split(paramValueLimitRegExp);
            if (paramNameAndValue.length != 2) {
                //可能是参数无值或者参数字符串格式不正确,空值返回
                continue;
            } else {
            if (paramNameAndValue[0] == paramName) {
                //找到同名的参数名,返回相对应的参数值.
                return paramNameAndValue[1];
            }
        }
    }
}
}
}

/**
* 游览器窗口最大化,根据auto参数指定是否自适应，true自适应屏幕大小．否则根据wwidth和wheight设置．
* @param wwidth 窗口宽度
* @param wheight 窗口高度
* @param auto 布尔值，如果设为trure将直接使用屏幕宽度和高度忽略设定值.
*/
function maximize(wwidth, wheight, auto) { 
    if (auto) {
        window.moveTo(0,0);
        window.resizeTo(screen.availWidth,screen.availHeight);
    } else {
    window.resizeTo(wwidth,wheight);
}
}

/**
* 设置图像元素的默认图示.
* 通过设置参数imageIndex的值来决定显示那张图，imageIndex是图像的序号.
* -1将视为隐藏元素.
* 需要页面引入Define.js
* @param elem 需要修改的img元素的引用
* @param imageIndex 图像序号，请参看Define.js
*/
function setDefaultImage(elem,imageIndex) {
    if ("IMG" == elem.tagName) {
        switch(imageIndex) {
            case -1:
            elem.style.display = "none";
            case 0:
            elem.src = errorIndexSmall.src;
            break;
            case 1:
            elem.src = errorStockLager.src;
        }
    }
}

/**
* 以指定url和宽高打开一个新窗口，一切效果从简
* @param url url地址
* @param w 宽度
* @param h 高度
*/
function openSimpleNewWindow(url,w,h) {
    var properts = "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no";
    if (w > 0) {
        properts += ",width=" + w;
    }
    if (h > 0) {
        properts += ",height=" + h;
    }
    
    var hanndle=window.open(url,null,properts);
    hanndle.focus();
}

/**
* 检测当前浏览器的是否安装Flash播放器
* @return true为已经安装，false为没有安装
*/
function chkFlash() {
    var isIE = (navigator.appVersion.indexOf("MSIE") >= 0);
    var hasFlash = true;
    
    if(isIE) {
        try{
            var objFlash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        } catch(e) {
        hasFlash = false;
    }
} else {
if(!navigator.plugins["Shockwave Flash"]) {
    hasFlash = false;
}
}
return hasFlash;
}

/**
* 隐藏元素,会将指定元素的所有子元素一并隐藏
* @param hideElemName 需要隐藏的元素的id值
*/
function hideSuperPict(hideElemName) {
    var hideElement = document.getElementById(hideElemName);
    var childs = hideElement.childNodes;
    for (var loop=0; loop < childs.length; loop++) {
        if (childs[loop].nodeType != 1) {
            continue;
        } else {
        childs[loop].style.display="none";
    }
}
hideElement.style.display="none";
}

/**
* 浏览器兼容性能测试
*/
function isCompatible(other) {
    // Use capability detection to check requirements
    if( other===false 
        || !Array.prototype.push
        || !Object.hasOwnProperty
        || !document.createElement
        || !document.getElementsByTagName
    ) {
    alert('TR- if you see this message isCompatible is failing incorrectly.');
    return false;
}
return true;
}

/**
* equals to document.getElementById()
*/
function $() {
    var elements = new Array();
    
    // Find all the elements supplied as arguments
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        
        // If the argument is a string assume it's an id
        if (typeof element == 'string') {
            element = document.getElementById(element);
        }
        
        // If only one argument was supplied, return the element immediately
        if (arguments.length == 1) {
            return element;
        }
        
        // Otherwise add it to the array
        elements.push(element);
    }
    // Return the array of multiple requested elements
    return elements;
};

/**
* DOM元素事件注册
*/
function addEvent( node, type, listener ) {
    // Check compatibility using the earlier method
    // to ensure graceful degradation
    if(!isCompatible()) { return false }
    if(!(node = $(node))) return false;
    
    if (node.addEventListener) {
        // W3C method
        node.addEventListener( type, listener, false );
        return true;
    } else if(node.attachEvent) {
    // MSIE method
    node['e'+type+listener] = listener;
    node[type+listener] = function(){node['e'+type+listener]( window.event );}
    node.attachEvent( 'on'+type, node[type+listener] );
    return true;
}

// Didn't have either so return false
return false;
};

/**
* gain browser visable height and width
*/
function getBrowserWindowSize() {
    var de = document.documentElement;
    
    // window.innerWidth for most browsers
    // document.documentElement.clientWidth for MSIE in strict mode
    // document.body.clientWidth for MSIE in quirks mode
    
    return {
        'width':(
            window.innerWidth 
            || (de && de.clientWidth ) 
            || document.body.clientWidth),
        'height':(
            window.innerHeight 
            || (de && de.clientHeight ) 
            || document.body.clientHeight)
    }
};

//gain document scrollTop and scrollLeft
function getDocumentScrollPosition() {
    return {
        'top':(document.body.scrollTop || document.documentElement.scrollTop),
        'left':(document.body.scrollLeft || document.documentElement.scrollLeft)
    }
}

/**
* 为<img>对象添加触发翻转属性
* eg: original image.src = 'abc.gif'
*        rollover image.src = ‘abc-on.gif'
* @param oImage {HTML image Element}  图片对象
* @param format {string} 图片格式 eg: '.gif'  and  '.png'
* @returns {boolean} 翻转属性添加成功或失败标志
*/
function setImage4rollover(oImage, format) {
    var src = oImage.src;
    if(src == null || src == '')  return false;
    
    // 图片的outImage属性，代表未翻转状态
    oImage.outImage = new Image();
    oImage.outImage.src = src;
    
    // 图片的overImage属性，代表翻转状态
    oImage.overImage = new Image();
    src = src.substring(0, src.indexOf(format));
    oImage.overImage.src = src + '-on' + format;
    
    addEvent(oImage, 'mouseout', function() {
        this.src = this.outImage.src;
    });
    
    addEvent(oImage, 'mouseover', function() {
        this.src = this.overImage.src;
    });
    
    return true;
}

/**
* 对象objMain在mouseover时触发对象objSub显示
* 对象objMain在mouseout时触发对象objSub隐藏
* @param objMain {object} 触发对象
* @param objSub {object} 被触发显示或隐藏的对象
* @param display {string} style: display = display objSub对象显示的方式
*/
function mouseoverDisplay(objMain, objSub, display) {
    addEvent(objMain, 'mouseover', function() {
        objSub.style.display = display;
    });
    
    addEvent(objMain, 'mouseout', function() {
        objSub.style.display = 'none';
    });
}
