/**
 * @author weiguoneng
 * @type JavaScript Document
 */

var projectsObject = null ;//all project object ,is array
var loadImgObj = null; //A picture for load time

dojo.addOnLoad(function(){
	loadingImg("img/loading.gif");//add loading imger,you input imger path
	requestProjectXmlFile("imgFile.xml");
    //alert(dojo.byId("information_View").className);
	
});

/**
 * load the xml file to local
 */
function requestProjectXmlFile(url){
	if (projectsObject != null) return;
	supportDojo(url);
}

function supportDojo(urlStr)
{
	dojo.xhrGet({
    url: urlStr,
    handleAs: "xml",
	preventCache : true ,
	transport: "XMLHTTPTransport",
    load: loadPageFinish, //type should be "load", data is that we wanted 
    error: function(type, error){
        //alert(" sorry data failed to load ");
    }
  });
}

function loadPageFinish(type, data, evt)
{
	loadend(data.xhr);
}

/**
 * after load the xml file to local event 
 * @param {Object} requestResult
 */
function loadend(requestResult){
	
	var xmlDom = requestResult.responseXML ;//firefox
    
    //if (Prototype.Browser.IE) {
	if(!!(window.attachEvent && !window.opera)){
        xmlDom = new ActiveXObject("Microsoft.XMLDOM");
        xmlDom.loadXML(requestResult.responseText);
        
    }
	
	addXmlFunction();
	processorXml(xmlDom);
}

/**
 * add function to Firefox 
 */
function addXmlFunction(){

	//estimate is FireFox
    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";
                }
            }
        }
    }
}

/**
 * processor xml file ,create xml object 
 * @param {Object} xmlDom
 */
function processorXml(xmlDom)
{
	var nodeList = xmlDom.selectNodes("/projects");
	projectsObject = new Projects(nodeList[0]) ;
	createIimageList();
}

function createIimageList()
{
	for(var i=0;i<projectsObject.ProjectList.length;i++)
	{
		var pObj = projectsObject.ProjectList[i];
		insertImgToDiv(pObj.Title+"_View" , pObj.Displays[0].ImageSRCBig);
		var htmlList = new Array();
        for (var j = 0; j < pObj.Displays.length; j++) {
			if (j < pObj.Displays.length-1) {
				htmlList[htmlList.length] = "<div id='thumbL' onclick=\"onClickImgList('" + pObj.Title + "_View" + "','" + pObj.Displays[j].ImageSRCBig + "') \"><img src='" + pObj.Displays[j].ImageSRC + "'></div>";
			}else
			{
				htmlList[htmlList.length] = "<div id='thumbR' onclick=\"onClickImgList('" + pObj.Title + "_View" + "','" + pObj.Displays[j].ImageSRCBig + "')\" ><img src='"+ pObj.Displays[j].ImageSRC +"'+></div><div id='clear'></div>" ;
			}
		}
		dojo.byId(pObj.Title+"_List").innerHTML= htmlList.join("");
	}
}

function onClickImgList(divId,ImgUrl)
{
	insertImgToDiv(divId,ImgUrl);
}

function insertImgToDiv(divId,ImgUrl)
{
	dojo.byId(divId).innerHTML="";
    var tempImg = new Image();
    waitForImage(tempImg, ImgUrl);
    dojo.byId(divId).appendChild(tempImg);
}

function loadingImg(url){
    var tempImg = new Image();
    tempImg.src = url;
    loadImgObj = tempImg;
}

/**
 * before load img finish ,earlier show the small loading state img 
 * @param {Object} pageImageObj
 * @param {Object} url
 */
function waitForImage(pageImageObj, url){

    pageImageObj.src = loadImgObj.src;
    var tempImg = new Image();
    tempImg.src = url;
    tempImg.onload = function(){
        pageImageObj.src = tempImg.src;
    };
    
    if (tempImg.height) {
        // IE
        pageImageObj.src = url;
    }
}
