
function validXmlGadgetModule(txt){

    var xmlDoc = LoadXMLDoc(txt); 
    
    var nodeModule;
    try{ 
        nodeModule = xmlDoc.getElementsByTagName("Module")[0];
    }catch(e){
        Event_AlertMsg(3, 'Invalid xml document.');
        return false;
    }
    
    if (nodeModule == null) {
        Event_AlertMsg(3, 'Root Module not found.');
        return false;
    }
    var nodeModulePrefs = nodeModule.getElementsByTagName("ModulePrefs")[0];
    if (nodeModulePrefs == null){
        Event_AlertMsg(3, 'Element ModulePrefs not found.');
        return false;
    } else if (getAttributeValue(nodeModulePrefs, "title") == ""){
        Event_AlertMsg(3, 'Attribute "title" at ModulePrefs not found.');
        return false;
    }else if (getAttributeValue(nodeModulePrefs, "description") == ""){
        Event_AlertMsg(3, 'Attribute "description" at ModulePrefs not found.');
        return false;
    }else if (getAttributeValue(nodeModulePrefs, "screenshot") == ""){
        Event_AlertMsg(3, 'Attribute "screenshot" at ModulePrefs not found.');
        return false;
    }else{
        var nodeLocale = nodeModule.getElementsByTagName("Locale")[0];
        if (nodeLocale != null){
            var cntLocale = nodeLocale.length;
            for (var i=0; i<cntLocale; i++){
                if (getAttributeValue(nodeLocale[i], "lang") == "" || getAttributeValue(nodeLocale[i], "messages") == ""){
                    Event_AlertMsg(3, 'Invalid Locale Format.');
                }
            }
        }
    }
    
    var nodeUserPrefs = nodeModule.getElementsByTagName("UserPref")[0];
    if (nodeUserPrefs != null){
        var cntUserPrefs = nodeUserPrefs.length;
        for (var i=0; i<cntUserPrefs; i++){
            if (getAttributeValue(nodeUserPrefs[i], "name") == ""){
                //alert('Invalid UserPref Format.');
                Event_AlertMsg(3, 'Invalid UserPref Format.');
            }
        }
    }
    
    var nodeContent = nodeModule.getElementsByTagName("Content")[0];
    if (nodeContent == null){
        Event_AlertMsg(3, 'Element Content not found.');
        return false;
    }else if (getAttributeValue(nodeContent, "type") != "html" && getAttributeValue(nodeContent, "type") != "url"){
        Event_AlertMsg(3, 'Attribute "type" at Content is invalid.');
        return false;
    }else if (getAttributeValue(nodeContent, "type") == "url" && getAttributeValue(nodeContent, "href") == ""){
        Event_AlertMsg(3, 'Attribute "href" at Content is invalid.');
        return false;
    }
    return true;
}

function validXmlGadgetRss(txt){

    var xmlDoc = LoadXMLDoc(txt); 
 
    var nodeRss = xmlDoc.getElementsByTagName("rss")[0];
    
    if (nodeRss == null){
        Event_AlertMsg(3, 'Invalid Rss Format.');
        return false;
    }
        
    var nodeChannel = nodeRss.getElementsByTagName("channel")[0];
    
    if (nodeChannel == null){
        Event_AlertMsg(3, 'Invalid Rss Format.');
        return false;
    }else{
        return true;
    }
    
    return false;
}

function getAttributeValue(element,attName){
    if (element.attributes.getNamedItem(attName) != null){
        return element.attributes.getNamedItem(attName).text;
    }else{
        return "";
    }
}


function CheckXmlGadgetNodeValue(type, gadgetid, txt){

    var xmlDoc = LoadXMLDoc(txt);    
    return true;
 }
 
 function GetXmlGadgetNodeValue(type, gadgetid, txt){
    
    var xmlDoc = LoadXMLDoc(txt);        
    var stringReturn = "";
    
    if (type == "module"){
        
        var nodeUserSettings = xmlDoc.getElementsByTagName("UserSettings")[0].getElementsByTagName("UserPref");
        
        stringReturn += "<UserSettings>";
        
        for (var i=0; i< nodeUserSettings.length; i++){      
                  
            var nodeUserPref = nodeUserSettings[i].getElementsByTagName("name")[0];  
            
            var name_userpref = "";            
            if (nodeUserPref.text == undefined){name_userpref = nodeUserPref.textContent}else{name_userpref = nodeUserPref.text;};
                        
            var value = "";
            
            stringReturn += "<UserPref>";
            stringReturn += "<name>" + name_userpref + "</name>";
            
            if (document.getElementById(name_userpref + "_" + gadgetid).type == "checkbox"){
                value = document.getElementById(name_userpref + "_" + gadgetid).status;
                stringReturn += "<value>" + value + "</value>";
            }else{
                value = document.getElementById(name_userpref + "_" + gadgetid).value;
                stringReturn += "<value>" + replaceAll(replaceAll(value, "\"", "&#34;"), "'", "&#39;") + "</value>";
            }
            
            stringReturn += "</UserPref>";
        }
        stringReturn += "</UserSettings>";
    }else{
        stringReturn += "<UserSettings>";
        stringReturn += "<UserPref>";
        stringReturn += "<name>items</name>";
        stringReturn += "<value>";
        stringReturn += document.getElementById('select_' + gadgetid).value;
        stringReturn += "</value>";
        stringReturn += "</UserPref>";
        stringReturn += "</UserSettings>";
    }
    
    return stringReturn;
}

function replaceAll( str, from, to ) {
    var idx = str.indexOf( from );


    while ( idx > -1 ) {
        str = str.replace( from, to ); 
        idx = str.indexOf( from );
    }

    return str;
}

function LoadXMLDoc(xmlString) 
{   
    var xmlDoc; 
    
    try //Internet Explorer
      {
          xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async="false";
          xmlDoc.loadXML(xmlString);
      }
    catch(e)
      {
        xmlDoc = null;
      try //Firefox, Mozilla, Opera, etc.
        {
            var parser = new DOMParser();
            xmlDoc = parser.parseFromString(xmlString, "text/xml");            
        }
      catch(e) {xmlDoc = null; Event_AlertMsg(3,e.message) }
      }
      
    return xmlDoc
}

