﻿// JavaScript Document
/*****************************************************************************************/
/*
显示投票操作，样式1，按钮模式
1.显示投票项目列表：
<div id="show_47">
	<script language="javascript" type="text/javascript">
	BuildVoteItemList(47);
	</script>
</div>
注明：格式是固定的，div的id必须满足show_id号的模式，BuildVoteItemList(id)方法将会在名为show_id的元素内显示投票项目列表。投票的话题要自己添加到网页，程序不会自动生成。

2.查看结果：<a href="javascript:openVoteResult('47','450','400')" >查看结果</a>
说明：openVoteResult(voteId,width,height)用来显示结果，采用弹出窗口的方式显示结果，参数以次数：编号，窗口宽度，窗口高度。注意，因为是采用window.open方法弹出窗口，故有可能会被浏览器给屏蔽。

3.投票的话题需要自己编辑到网页里面，程序不会自动生成话题。
/*显示投票结果*/
function openVoteResult(voteId,width,height)
{
	var theURL='/vote/voteResult.aspx?voteId=' + voteId;
	var features='toolbar=yes,scrollbars=yes,resizable=no,top=100,left=100,width=' + width + ',height=' + height;
	var win=window.open(theURL,'voteResult',features);
	win.focus();
}
/*对单一项目进行投票*/
function PollDlg(voteId,itemId)
{
	var spanImg=$( 'img_' + itemId);
	var spanNum=$( 'num_' + itemId);
	var num=spanNum.innerHTML;
	num++;
	spanNum.innerHTML=num;
	spanImg.innerHTML= '<img src="/vote/imgs/voted.gif" width="34" height="17" border="0" />';		
	var url='/vote/voteHandle1.aspx?';
	var r=Math.random();
	var pars='VoteId=' + voteId + '&ItemId=' + itemId + 'r=' + r;
	var myAjax=new Ajax.Request(
		url,
		{
			method:'get',
			parameters:pars
		}
	)
}
/*构造投票选项*/
function BuildVoteItemList(voteId)
{
	/*向服务器发送请求*/
	var url = '/vote/voteItemList.aspx';
	var r=Math.random();
	var pars = 'voteId=' + voteId + '&r=' + r;	
	myAjax = new Ajax.Request(
		url,
		{
			method:'get',
			parameters:pars,
			onComplete:showItemList /*显示投票的项目列表*/
		}
	);		
}
function showItemList(originalRequest)
{
	/*获取服务器返回的xml数据*/
	/*
	<vote id="1" type="0" title="xxx">
		<item>
			<voteId>1</voteId>
			<itemName>sadaa</itemName>
			<itemId>vvfdsv</itemId>
			<itemNum>1</itemNum>
		</item>
	</vote>
	*/
	var xmlStr = originalRequest.responseText ;
	/*显示结果*/
	var xmlDoc;
	if(window.ActiveXObject)    //IE
    {
		var xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
	}
	else
	{
		xmlDoc=document.implementation.createDocument("", "", null); 
	}
	xmlDoc.async = false;
	xmlDoc.loadXML(xmlStr);	/*加载xml*/
	//var root=xmlDoc.documentElement; /*获取根节点*/
	var nodeList;
	nodeList=xmlDoc.selectNodes('//item');
	var vote=xmlDoc.selectSingleNode("//vote"); //获取根节点
	var title=vote.attributes.getNamedItem("title").value;
	var type=vote.attributes.getNamedItem("type").value;
	var voteId=vote.attributes.getNamedItem("voteId").value;
	var itemName;
	var itemId;
	var itemNum;
	var html='<ul>';				
	for (var i=0;i<nodeList.length;i++) /*遍历节点*/
	{
		//var itemNode=nodeList.item(i);
		//voteId=itemNode.selectSingleNode('voteId').text;
		itemId=GetNodeValue( nodeList[i].selectSingleNode('itemId') );
		itemName=GetNodeValue( nodeList[i].selectSingleNode('itemName') );
		itemNum=GetNodeValue( nodeList[i].selectSingleNode('itemNum') );
		html += '<li>';
		html += itemName + '&nbsp;';
		html += '<span id="img_' + itemId + '">';
		html += '<a href="javascript:PollDlg(\''  + voteId + '\',\'' + itemId + '\')">';
		html += '<img src="/vote/imgs/vote.gif" width="34" height="17" border="0" /></a></span>&nbsp;';
		html += '[<span id="num_' + itemId + '">' + itemNum + '</span>]';
		html += '</li>';
	}
	html+='</ul>';		
	html+='<div id="showResult_' + itemId + '"><a href="javascript:openVoteResult(\'' + voteId + '\',\'450\',\'400\')">[查看结果]</a></div>';
	$('show_' + voteId).innerHTML = html;
}
/*****************************************************************************************/
/*****************************************************************************************/
/*
投票样式2：表单提交方式
流程，通过ajax在后台异步提交结果，等待处理完成后弹出窗口显示结果。
使用方式：
<div id="show_47">
	<script language="javascript" type="text/javascript">
	BuildVoteForm(47);
	</script>
</div>
投票的话题不会自动生成，需要手动写入到网页
*/
/* 提交投票数据 */
function Send_Input(id,type)
{
	var input;
	if(type==0)
	{
		/*单选*/
		input = document.getElementsByName('radio_' + id);
	}
	else
	{
		/*多选*/
		input = document.getElementsByName('check_' + id);
	}
	var i;
	var valueStr='';
	for(i=0;i<input.length;i++)
	{
		if(input[i].checked)
		{
			valueStr += input[i].value + '|' ;
		}
	}
	if(valueStr.length>0)
	{
		valueStr=valueStr.substr(0,valueStr.length-1);
	}
	var url='/vote/voteHandle2.aspx';
	var pars;
	var r=Math.random();
	pars='voteId=' + id + '&value=' + valueStr + '&r=' + r;
	pars=encodeURI(pars);
	//alert(pars);
	var myAjax=new Ajax.Request(
		url,
		{
			method:'post',
			parameters:pars
		}
	)
	var voteImg=$('voteImg_' + id);
	voteImg.innerHTML='<img src="/vote/imgs/voted.gif" width="34" height="17" border="0" />';
}
/* 生成投票样式 */
function BuildVoteForm(id)
{
	var url='/vote/VoteItemList.aspx';
	var pars='voteId=' + id ;
	myAjax = new Ajax.Request(
		url,
		{
			method:'get',
			parameters:pars,
			onComplete:showVote /*显示投票*/
		}
	);
}
function showVote(originalRequest)
{
	/*获取服务器返回的xml数据*/
	/*
	<vote id="1" type="0" title="xxx">
		<item>
			<voteId>1</voteId>
			<itemName>sadaa</itemName>
			<itemId>vvfdsv</itemId>
			<itemNum>1</itemNum>
		</item>
	</vote>
	*/
	var xmlStr = originalRequest.responseText ;
	/*显示结果*/
	var xmlDoc;
	if(window.ActiveXObject)    //IE
    {
		var xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
	}
	else //其他浏览器
	{
		xmlDoc=document.implementation.createDocument("", "", null); 
	}
	xmlDoc.async = false;
	xmlDoc.loadXML(xmlStr);	/*加载xml*/
	var nodeList;
	nodeList=xmlDoc.selectNodes('//item');
	var vote=xmlDoc.selectSingleNode("//vote"); //获取根节点
	var voteId=vote.attributes.getNamedItem("voteId").value;
	var title=vote.attributes.getNamedItem("title").value;
	var type=vote.attributes.getNamedItem("type").value;
	var itemName;
	var itemId;
	var itemNum;
	var html='';
	var j=0;		
//	html += '<table width="100%" align="center" cellpadding="0" cellspacing="0" border="0">';	
//	html += '<tr><td>';
	html += '<ul>';
	for (var i=0;i<nodeList.length;i++) /*遍历节点*/
	{	
		j++;
		itemId=GetNodeValue( nodeList[i].selectSingleNode('itemId') );
		itemName=GetNodeValue( nodeList[i].selectSingleNode('itemName') );
		itemNum=GetNodeValue( nodeList[i].selectSingleNode('itemNum') );
//		html += '<tr>';
//		html += '<td>';
		html += '<li>';
		if (type==0) 
		{
			//单选
			html += '<input name="radio_' + voteId + '" type="radio" id="radio_' + voteId + '_' + j + '" value="'+ itemId +'" />';
			html += '<label for="radio_' + voteId + '_' + j + '">' + itemName + '</label>';
		}
		else
		{
			//多选
			html += '<input name="check_'+ voteId +'" type="checkbox" id="check_'+ voteId +'_'+ j +'" value="'+ itemId +'" />';
			html += '<label for="check_' + voteId + '_' + j + '">' + itemName + '</label>';
		}
//		html += '</td></tr>';
		html += '</li>';
	}
	html += '</ul>';
//	html += '</td></tr>';
//	html += '<tr><td>';
	html += '<div id=\'ShowVoteBtn\'>';
	html += '<span id="voteImg_' + voteId + '">';
	html += '<img src="/vote/imgs/vote.gif" width="34" height="17"  style="cursor:pointer" onclick="javascript:Send_Input(\''+ voteId +'\','+ type +')" /></span> <img src="/vote/imgs/voteView.gif" width="34" height="17" style="cursor:pointer" onclick="javascript:openVoteResult(\''+ voteId +'\',\'450\',\'400\')" />';
//	html += '</td></tr>';
//	html += '</table>';
	html += '</div>';
//		alert(vote.attributes.getNamedItem("title").value); //获取属性
	$('show_' + voteId).innerHTML = html;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
//下面的代码是用于Foxfire的///
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
var GetNodeValue = function(obj)
{
    var str = "";
    if(window.ActiveXObject)    //IE
    {
        str = obj.text;
    }
    else //Mozilla
    {
        try
        {
            str = obj.childNodes[0].nodeValue;
        }
        catch(ex)
        {
            str = "";
        }
    }
    return str;
}

if(document.implementation && document.implementation.createDocument)
{
    XMLDocument.prototype.loadXML = function(xmlString)
    {
        var childNodes = this.childNodes;
        for (var i = childNodes.length - 1; i >= 0; i--)
            this.removeChild(childNodes[i]);

        var dp = new DOMParser();
        var newDOM = dp.parseFromString(xmlString, "text/xml");
        var newElt = this.importNode(newDOM.documentElement, true);
        this.appendChild(newElt);
    };

    // check for XPath implementation
    if( document.implementation.hasFeature("XPath", "3.0") )
    {
       // prototying the XMLDocument
       XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
       {
          if( !xNode ) { xNode = this; } 
          var oNSResolver = this.createNSResolver(this.documentElement)
          var aItems = this.evaluate(cXPathString, xNode, oNSResolver, 
                       XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
          var aResult = [];
          for( var i = 0; i < aItems.snapshotLength; i++)
          {
             aResult[i] =  aItems.snapshotItem(i);
          }
          return aResult;
       }

       // prototying the Element
       Element.prototype.selectNodes = function(cXPathString)
       {
          if(this.ownerDocument.selectNodes)
          {
             return this.ownerDocument.selectNodes(cXPathString, this);
          }
          else{throw "For XML Elements Only";}
       }
    }

    // check for XPath implementation
    if( document.implementation.hasFeature("XPath", "3.0") )
    {
       // prototying the XMLDocument
       XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
       {
          if( !xNode ) { xNode = this; } 
          var xItems = this.selectNodes(cXPathString, xNode);
          if( xItems.length > 0 )
          {
             return xItems[0];
          }
          else
          {
             return null;
          }
       }
       
       // prototying the Element
       Element.prototype.selectSingleNode = function(cXPathString)
       {    
          if(this.ownerDocument.selectSingleNode)
          {
             return this.ownerDocument.selectSingleNode(cXPathString, this);
          }
          else{throw "For XML Elements Only";}
       }
    }
}