﻿/**
 * Last Edited by: Ranyodh Singh
 * Date: July 22, 2008
 * Modified the file to also include parameters for XSLT file.
 * The file has been heavily modified (original content is commented out at the bottom)
 */

  
function displayResult(XMLData, XSLStyleSheet, InsertElementID, Parameters)
{
    
    if(BrowserDetect.browser != 'Safari') {
        //Load the XML files
	    XML = loadXMLStream(XMLData);
	    XSL = loadXMLDoc(XSLStyleSheet);
	  
	    XSLTTransform(XML, XSL, InsertElementID, Parameters);
    } else {
        XML = loadXMLStream(XMLData);
        safariComments(XML, InsertElementID);
        //sendHTTPRequest(XSLStyleSheet, XSLTTransform, XML, InsertElementID, Parameters)
        
    }
}


function XSLTTransform(XMLData, XSLStyleSheet, InsertElementID, Parameters)
{
  //Function to perform the XSLT based transformation
  if (window.ActiveXObject)
  {//Code for internet explorer
    var XSLTCompiled = new ActiveXObject("MSXML2.XSLTemplate");
    XSLTCompiled.stylesheet = XSLStyleSheet.documentElement;
    // create XSL-processor
    var XSLTProc = XSLTCompiled.createProcessor();
    XSLTProc.input = XMLData;

    if (Parameters != null)
    {//Loop through the parameters and apply each to the XSLT Processor
      for (var Index in Parameters)
      {
        
        XSLTProc.addParameter(Index, Parameters[Index]);
      }
    }

    XSLTProc.transform();
 
    document.getElementById(InsertElementID).innerHTML = XSLTProc.output;
  }
  else if (document.implementation && document.implementation.createDocument)
  {//Code for mozilla
    
    var XSLTProc = new XSLTProcessor();
 
    XSLTProc.importStylesheet(XSLStyleSheet);
    
    if (Parameters != null)
    {//Loop through the parameters and apply each to the XSLT Processor
      for (var Index in Parameters)
      {
        XSLTProc.setParameter(null, Index, Parameters[Index]);
      }
    }
    
    
    
	var newFragment = XSLTProc.transformToFragment(XMLData, document);    
    document.getElementById(InsertElementID).appendChild(newFragment);
    
  }
  else
  {
    window.alert("Browser does not support XSLT.");
    return false;
  }
}


// Transform an XML document using an XSLT transformation file.
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("MSXML2.FreeThreadedDomDocument");
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation 
&& document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}

function loadXMLStream(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.loadXML(fname);
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation 
&& document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  parser=new DOMParser();
    xmlDoc=parser.parseFromString(fname,"text/xml");
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
return(xmlDoc);
}


function sendHTTPRequest(url,callback, XML, InsertElementID, Parameters) {
	var req = createXMLHTTPObject();
	if (!req) return;
	req.open("GET",url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
//			alert('HTTP error ' + req.status);
			return;
		}
		callback(XML, req.responseXML, InsertElementID, Parameters );
	}
	if (req.readyState == 4) return;
	req.send('');
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}




var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function safariComments(xmlComments, InsertElementID)  {

    var commentBlock = '<div style=" font-weight:bold; font-size:12px; width:100%; height:auto; color:Black; clear:both; margin-bottom:8px;">Comments on this Photo</div>';
    var sAlbumID = xmlComments.getElementsByTagName('abID')[0].firstChild.textContent;
    var sPage = xmlComments.getElementsByTagName('Page')[0].firstChild.textContent;
    var sArticleID = xmlComments.getElementsByTagName('arID')[0].firstChild.textContent;
    
    var allComments = xmlComments.getElementsByTagName('Comment');
    
    for(i=0; i<allComments.length; i++) {
           
        var sComment_ID = allComments[i].childNodes[1].textContent;
        var sUser_name = allComments[i].childNodes[3].textContent;
        var sUser_ID = allComments[i].childNodes[5].textContent;
        var sComment_Text = allComments[i].childNodes[7].textContent;
        var sRating = allComments[i].childNodes[9].textContent;
        var sPictureId = allComments[i].childNodes[13].textContent;
        
        commentBlock += '<div class="commentbox">';
	    commentBlock += '<div class="content">';
	    commentBlock += '<div class="t"></div>';
	    commentBlock += '<div class="d"><div>';
	    commentBlock += '<div class="commentcontent" style="font-size:12px;">'+sComment_Text+'</div>';
	    commentBlock += '</div></div></div></div>';
    	
	    commentBlock += '<div class="cfooter">';
	    commentBlock += '<div class="content">';
	    commentBlock +=	'<div class="t"></div>';
	    commentBlock +=	'<div class="d">';
	    commentBlock += '<div class="commentfooter">';
	    commentBlock +=	'<div style="float:left;">';
	    commentBlock += '<a href="#bottom"><span>Reply</span></a> | '; 
	    commentBlock += '<a class="thickbox" title="Report this Comment" href="/report/default.aspx?keepThis=true&amp;ctId=8&amp;thrId='+sComment_ID+'&amp;abId='+sAlbumID+'&amp;PgType='+sPage+'&amp;arID='+sArticleID+'&amp;imgId='+sPictureId;
	    
	    // This mehtod is in gallery.js
	    if(isCommunity()) 
	        commentBlock += '&amp;community=1';
	        
	    commentBlock += '&amp;comment=true&amp;TB_iframe=true&amp;height=400&amp;width=400"><span>Report</span></a> | ';
	    commentBlock += '<a href="#top"><span>Page Top</span></a>';
	    commentBlock += '</div>';
        commentBlock += '<div style="float:right;">Post # '+(i+1)+' number By ';
	    commentBlock += '<a href="../Account/profile.aspx?un='+sUser_name+'">'+sUser_name+'</a><span id="thrvote">Votes: '+sRating+' |<b>Vote:</b>';
        commentBlock += '<img border="0" style="cursor:pointer" src="../images/thumbsup.gif" title="Thumbs Up!" onClick=" javascript:rating(1,'+493+',1)"/>';
        commentBlock += '<img border="0" style="cursor:pointer" src="../images/thumbsdown.gif" title="Thumbs down!" onClick="javascript:rating(-1,'+493+',1)"/></span>';
	    commentBlock += '</div>';
	    commentBlock += '<div class="spacer"></div>';
	    commentBlock += '</div></div></div></div>';
        
	}

    //var hel = xmlComments.getElementsByTagName('abID')[0].firstChild.data
    
    //var commentNode = loadXMLStream(commentBlock);
    document.getElementById(InsertElementID).innerHTML = commentBlock;
}