//SESSIONS VARIABLES
var history_path;
var history_textures;

//GLOBAL CONSTANT STRINGS
var EXT_REF_PROPERTY_NAME = "EXT-REF";
var SPECIFICATION_TEXTURE_WIDTH_PROPERTY_NAME = "SPECIFICATION TEXTURE WIDTH";
var SPECIFICATION_TEXTURE_HEIGHT_PROPERTY_NAME = "SPECIFICATION TEXTURE HEIGHT";

var WASH_CARE_LABEL_PROPERTY_NAME = "WASH CARE LABEL";
var DRY_CARE_LABEL_PROPERTY_NAME = "DRY CARE LABEL";
var DRY_WASH_CARE_LABEL_PROPERTY_NAME = "DRY WASH CARE LABEL";
var BLEACH_CARE_LABEL_PROPERTY_NAME = "BLEACH CARE LABEL";
var IRONING_CARE_LABEL_PROPERTY_NAME = "IRONING CARE LABEL";
var FABRIC_COMPOSITION_PROPERTY_NAME = "FABRIC COMOPOSITION";
var FABRIC_WEIGHT_PROPERTY_NAME = "FABRIC WEIGHT";
var PRODUCT_AIDIMA_QUALITY_SYMBOL = "PRODUCT AIDIMA QUALITY SYMBOL";

var DIM_PRODUCT_IMAGE = [4000,545];
var DIM_PRODUCT_IMAGE_SMALL = [125,150];
var DIM_AREA = [125,549];
var DIM_TEXTURE_IMAGE = [69,69];

//GLOBAL VARIABLES

var option=null;
var contextXmlDoc=null;
var interfaceLanguage='undefined';
var catalogueLanguage='undefined';
var servidor="";
var rutaDelCatalogo="";
var selectedTheme='';
var selectedLanguage='es';
var colection='';
var product_selected='';
//Catalog variables

//Navigation variables
var loading=false;

//Scrollin variables
var mainScroll=null;
var secondaryScroll=null;
var limitationTimer=null;

var url_serv = "http://www.morata.com/fsdb-webapp2/";
var url_web = "http://www.morata.com/";

//var url_serv = "http://fgigante:8084/fsdb-webapp2/";
//var url_web = "http://fgigante:8084/morata/";

var catalogue_name = "MORATA";
var database_name = "";
var database_id = "morata";
var source_type = "RELATIVE URL";

var xml_multilanguage = null;

var id_product_acv = "";
var product_pc = "";
var selected_configuration = null;
var selected_image_path_product = null;
var selected_item_shape = null;
var cache_textures_xml = null;


var favorite="";

//******************************* GLOBAL CLASSES *****************************//
function servCall(servletName) {
    this.servletName = servletName;
    this.arguments = new Array();
}

function loadXml(call, params){

    //Parse servCall to parameters
    var args = "";
    for (var i=0; i<call.arguments.length; i++) {
        var arg = call.arguments[i] ;
        args += arg[0] + "=" + arg[1] + "&";
    }
    args = args.substring(0, args.length - 1) ;
    args += "" ;

    try {
        $.ajax({
            async:true,
            type: call.method,
            url: url_serv + call.servletName,
            data: args,
            contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
            success: function(result) {
                callback_loadXml(result, params) ;
            },
            error: function(result) {                
                /*
                 * //SC_EXPECTATION_FAILED (417)
                 * //SC_NOT_FOUND (404)
                 * //SC_INTERNAL_SERVER_ERROR (500)
                 */
                
                if ( result.status == 500 || result.status == 417 || result.status == 404 ) { 
                    alert(result.responseText);//tryAgain('index.html');
                }
                else {
                    var txt = "";
                    for (var i=0; i<params.length; i++) {
                        txt += params[i][0] + ": " + params[i][1] + "\n";
                    }
                    $('#exception_msg').html( result.status + "\n" + txt + result.responseText );
                }
//                window.location = "index.html";
            }
        });
    }
    catch (e) {
        alert(e) ;
    }
}

function tryAgain(page) {
    $('#exception_msg').css('height', '32px');
    $('#exception_msg').css('background-image', 'url(img/loading_yellow.gif)');
    $('#exception_msg').css('background-repeat', 'no-repeat');
    $('#exception_msg').css('background-position', 'center');
    
    var t = setTimeout("reload('" + page + "')", 4000);
}

function loadHtml(filename, divId, cb_function, params){
    try  {
        $.ajax({
            //            async:true,
            url : "html/" + filename + ".html",
            contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
            success : function (data) {
                $("#" + divId).html(data);
                if (cb_function != null) {
                    if (params != null) {
                        cb_function(params);
                    }
                    else {
                        cb_function(null);
                    }
                }
            },
            error: function(result) {
                alert("Error in $.ajax request") ;
            }
        });
    }
    catch (e) {
        alert(e) ;
    }
}

function loadHtmlContent(divIdToLoad, classToRestore, divId){
    try  {
        var  div = $("#" + divIdToLoad);
        $('.'+ classToRestore).css( 'display', 'none' );
        $("#" + divId).css( 'display', 'block' );
        $("#" + divId).html(div.html()) ;
    }
    catch (e) {
        alert(e) ;
    }
}


//******************************* LOAD SCREEN FUNCTIONS   **********************
function loadCssFiles(){
    var params = new Array(1);

    try{
        if(loading){
            return;
        }

        loading=true;

        contextXmlDoc=importXml('CSS/themeList.xml');

        for (i = 0; i < params.length; ++ i)
            params [i] = new Array(2);

        params[0][0]="selectedTheme";
        params[0][1]="selectedTheme";

        var cssLinks=doHTMLTransformation(contextXmlDoc,'XSL/writeThemeLinks.xsl',params);

        document.write(cssLinks);
    } catch (e) {
        document.write("There was an error on this page.\n\n");
        document.write("Error name: " + e.name + "\n\n");
        document.write("Error description: " + e.message + "\n\n");
    }finally{
        loading=false;
    }
}


//******************************** FUNCTIONS **************************************
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//****************************** IMPORT FUNCTIONS ******************************
function importLocalXML(localXMLPath) {
    var xmlDoc=null;
    var stringDoc="";
    var parser=null;
    var applet=null;

    try {
        applet=document.AppletTools;

        applet.loadFile(localXMLPath);

        while(applet.getStringDocument()=="NOTHING"){

        }

        stringDoc=applet.getStringDocument();

        if(stringDoc!="FAILED"){
            if (document.implementation && document.implementation.createDocument) {

                parser=new DOMParser();

                xmlDoc=parser.parseFromString(stringDoc,"text/xml");
            }else{
                var xmlDoc=new ActiveXObject("Msxml2.DOMDocument");
                xmlDoc.async="false";
                xmlDoc.resolveExternals = false;

                xmlDoc.loadXML(stringDoc);
            }
        }
        else{
            xmlDoc=applet.getErrorDescription();
        }
    }catch(e) {
        xmlDoc="There was an error on this page.\n\n";
        xmlDoc+="Error name: " + e.name + "\n\n";
        xmlDoc+="Error description: " + e.message + "\n\n";
    }

    return xmlDoc;
}


function importXml(xmlPath){
    var importedXmlDoc;
    var s=document.URL;
    var xml;

    try {
        //If we are dealing with other document
        if(xmlPath.length>0){
            xml=xmlPath;
        }else{
            //We take the actual document path
            xml=s.substring(s.lastIndexOf("\\")+1,s.length);
        }


        if (document.implementation && document.implementation.createDocument) {
            // load the xml file
            var myXMLHTTPRequest = new XMLHttpRequest();
            myXMLHTTPRequest.open("GET", xml, false);
            myXMLHTTPRequest.send(null);

            importedXmlDoc = myXMLHTTPRequest.responseXML;
        }else{
            //For IE
            if (window.ActiveXObject) {
                //Load the xml file
                var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
                xmlDoc.async = false;
                xmlDoc.resolveExternals = false;
                xmlDoc.load(xml);

                importedXmlDoc=xmlDoc;
            }else{
                alert('Your browser does not support client-side XSL transformations.'); //unsupported browser
            }
        }
    } catch (e)  {
        importedXmlDoc="There was an error on this page.\n\n";
        importedXmlDoc+="Error name: " + e.name + "\n\n";
        importedXmlDoc+="Error description: " + e.message + "\n\n";
    }

    return importedXmlDoc;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//********************** TRANSFORMATION FUNCTIONS ******************************
function doHTMLTransformation(xmlFile,xslPath,params){
    var htmlContent="";
    var result;
    var row;

    try {
        if (document.implementation && document.implementation.createDocument) {
            var xslStylesheet;
            var xsltProcessor = new XSLTProcessor();

            //Load XSLT Procesor with xsl file
            var myXMLHTTPRequest = new XMLHttpRequest();
            myXMLHTTPRequest.open("GET", xslPath, false);
            myXMLHTTPRequest.send(null);

            xslStylesheet = myXMLHTTPRequest.responseXML;
            xsltProcessor.importStylesheet(xslStylesheet);

            //Add params
            for (row = 0; row <params.length; ++row){
                xsltProcessor.setParameter(null,params[row] [0], params[row] [1]);
            }

            //Make transformation
            result=xsltProcessor.transformToDocument(xmlFile);

            //Return the contents
            var xmls = new XMLSerializer();
            htmlContent=xmls.serializeToString(result);
        }else{
            //For IE
            if (window.ActiveXObject) {
                var xslt = new ActiveXObject("Msxml2.XSLTemplate");
                var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
                var xslProc;

                //Load XSLT Procesor with xsl file
                xslDoc.async = false;
                xslDoc.resolveExternals = true;
                xslDoc.setProperty("AllowDocumentFunction",true);
                xslDoc.load(xslPath);
                xslt.stylesheet = xslDoc;

                //Create the xsl processor
                xslProc = xslt.createProcessor();
                xslProc.input = xmlFile;

                //Add params
                for (row = 0; row <params.length; ++row){
                    xslProc.addParameter(params[row] [0], params[row] [1]);
                }

                //Make transformation
                xslProc.transform();

                //Write the contents
                if((xmlFile.parseError.errorCode == 0) && (xmlFile.parseError.errorCode ==0)){
                    htmlContent=xslProc.output;
                }else{
                    htmlContent	= 'Reason: ' + xmlFile.parseError.reason;
                }
            }else{
                alert('Your browser does not support client-side XSL transformations.'); //unsupported browser
            }
        }
    } catch (e)  {
        htmlContent="There was an error on this page.\n\n";
        htmlContent+="Error name: " + e.name + "\n\n";
        htmlContent+="Error description: " + e.message + "\n\n";

        throw e.message;
    }
    return htmlContent;
}


function doXMLTransformation(xmlFile,xslPath,params){
    var transformedXmlDoc;

    try {
        //If the xsl param is set we must do a xsl transformation to the xml
        //document passed as param that will generate a new xml document.
        if(xslPath.length>0){
            if (document.implementation && document.implementation.createDocument) {
                var xslStylesheet;
                var xsltProcessor = new XSLTProcessor();

                //Load XSLT Procesor with xsl file
                var myXMLHTTPRequest = new XMLHttpRequest();
                myXMLHTTPRequest.open("GET", xslPath, false);
                myXMLHTTPRequest.send(null);

                xslStylesheet = myXMLHTTPRequest.responseXML;
                xsltProcessor.importStylesheet(xslStylesheet);

                //Add params
                var row;
                for (row = 0; row <params.length; ++row){
                    xsltProcessor.setParameter(null,params[row] [0], params[row] [1]);
                }

                //Make transformation
                transformedXmlDoc = xsltProcessor.transformToDocument(xmlFile);

            }else{
                //For IE
                if (window.ActiveXObject) {
                    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
                    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
                    var xslProc;

                    //Load XSLT Procesor with xsl file
                    xslDoc.async = false;
                    xslDoc.resolveExternals = true;
                    xslDoc.setProperty("AllowDocumentFunction",true);
                    xslDoc.load(xslPath);
                    xslt.stylesheet = xslDoc;

                    xslProc = xslt.createProcessor();
                    xslProc.input = xmlFile;

                    //Add params
                    for (row = 0; row <params.length; ++row){
                        xslProc.addParameter(params[row] [0], params[row] [1]);
                    }

                    //Make transformation
                    xslProc.transform();

                    var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
                    xmlDoc.async="false";

                    xmlDoc.loadXML(xslProc.output);

                    transformedXmlDoc=xmlDoc;
                }else{
                    alert('Your browser does not support client-side XSL transformations.'); //unsupported browser
                }
            }
        }else{
            //Return the same xml file
            transformedXmlDoc=xmlFile;
        }
    } catch (e)  {
        transformedXmlDoc="There was an error on this page.\n\n";
        transformedXmlDoc+="Error name: " + e.name + "\n\n";
        transformedXmlDoc+="Error description: " + e.message + "\n\n";
    }

    return transformedXmlDoc;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//*************************** WRITING FUNCTIONS ***********************************
function writeStringXMLToLocalFile(localXMLPath,stringContent) {
    var result=null;
    var applet=null;

    try {
        applet=document.AppletTools;

        applet.writeFile(localXMLPath,stringContent);

        while(applet.getXml2Write()=="NOTHING"){

        }

        if(applet.getXml2Write()!="FAILED"){
            result="Information saved succesfully";
        }else{
            result=applet.getErrorDescription();
        }
    }catch(e) {
        result="There was an error on this page.\n\n";
        result+="Error name: " + e.name + "\n\n";
        result+="Error description: " + e.message + "\n\n";
    }finally{
        alert(result);
    }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//*************************** SCROLLING DATA ***********************************
function ContainerScroller (container,orientation){
    this.containerScroller=container;
    if(orientation==null){
        this.scrollerOrientation="VERTICAL";
    }else{
        this.scrollerOrientation=orientation;
    }
    this.posContainer=0;
    this.containerHeight=container.clientHeight;
    this.scrollingSpeed=-1;
    this.scrollingOrientation=-1;
    this.scrollingTimerId=null;
    this.scrollIncrement=2;
}

ContainerScroller.prototype.scroll = function (){
    if(this.containerScroller==null){
        return;
    }

    if(this.scrollerOrientation=="VERTICAL"){
        this.containerScroller.style.marginTop=this.posContainer + 'px';
    }else{
        this.containerScroller.style.marginLeft=this.posContainer + 'px';
    }

    if(this.scrollingOrientation==0){
        if(this.posContainer<-this.containerHeight) {
            this.posContainer=-this.containerHeight;
            this.scrollingSpeed=-1;
            this.scrollingOrientation=-1;

            clearTimeout(this.scrollingTimerId);

            return;
        }

        this.posContainer=this.posContainer-this.scrollIncrement;
    }
    else{
        if(this.posContainer>=0) {
            this.posContainer=0;
            this.scrollingSpeed=-1;
            this.scrollingOrientation=-1;

            clearTimeout(this.scrollingTimerId);

            return;
        }

        this.posContainer=this.posContainer+this.scrollIncrement;
    }



    var myClass=this;

    this.scrollingTimerId=setTimeout(function(){
        myClass.scroll();
    },this.scrollingSpeed);


};

ContainerScroller.prototype.startScrolling = function (scrollOrientation){
    if(this.containerScroller==null){
        return;
    }

    if(scrollOrientation!=this.scrollingOrientation){
        this.scrollingOrientation=scrollOrientation;


        if(this.scrollingSpeed==-1){
            this.scrollingSpeed=1;

            this.scroll();
        }else{
            //If we are changing the scroll direction stop scrolling
            this.stopScrolling();
        }
    }else{
        //        this.scrollingSpeed-=0.1;
        if(this.scrollingSpeed<1){
            this.scrollingSpeed=1;
        }
    }
}

ContainerScroller.prototype.stopScrolling = function (){
    if(this.containerScroller==null){
        return;
    }

    this.scrollingSpeed=-1;
    this.scrollingOrientation=-1;

    clearTimeout(this.scrollingTimerId);
}




function LoopContainerScroller (container1,container2,targetContainer,selectedImageContainer,imageContainerName,orientation){
    var container;

    this.list=document.getElementsByName(imageContainerName);
    this.selectedImageContainer=selectedImageContainer;
    this.targetContainer=targetContainer;

    this.selectedAmbientIndex=-1;

    this.container1=container1;
    this.container2=container2;

    if(orientation==null){
        this.scrollerOrientation="VERTICAL";
    }else{
        this.scrollerOrientation=orientation;
    }

    container=container1.parentNode;

    this.imageSeparation=5;
    this.posContainer1=5;
    if(this.scrollerOrientation=="VERTICAL"){
        this.imageSize=this.targetContainer.clientHeight -(this.imageSeparation*2);
        container1.style.height=(this.imageSize + this.imageSeparation) *(this.list.length/2)+ 'px';
        container2.style.height=container1.style.height;

        if(container.clientHeight>container1.clientheight){
            container1.style.height=container.clientHeight + 'px';
            container2.style.height=container.clientHeight + 'px';
        }

        this.containerSize=container1.clientHeight;
    }else{
        this.imageSize=this.targetContainer.clientWidth-(this.imageSeparation*2);
        container1.style.width=(this.imageSize + this.imageSeparation)*(this.list.length/2)+ 'px';
        container2.style.width=container1.style.width;

        if(container.clientWidth>container1.clientWidth){
            container1.style.width=container.clientWidth + 'px';
            container2.style.width=container.clientWidth + 'px';
        }

        this.containerSize=container1.clientWidth;
    }

    this.posContainer2=this.containerSize;

    //Set the position of the containers
    this.setContainerPosition();

    this.scrollingSpeed=-1;
    this.scrollingOrientation=-1;
    this.scrollIncrement=2;

    this.scrollingTimerId=null;

    this.slideRunning=false;
    this.slideShowTimerId=null;
    this.slideShowInterval=10000;//10s

    //Set the initial image
    this.findAmbientImage();

}

LoopContainerScroller.prototype.scroll = function (){
    if(this.container1==null){
        return;
    }

    //Set the position of the containers
    this.setContainerPosition();

    //If we found the image to stop
    if(this.findAmbientImage()){
        //Reposition the containers
        this.setContainerPosition();

        return;
    }
    
    if(this.scrollingOrientation==0){
        if(this.posContainer1<=-this.containerSize) {
            this.posContainer1=this.containerSize;
        }

        if(this.posContainer2<=-this.containerSize) {
            this.posContainer2=this.containerSize;
        }

        this.posContainer1=this.posContainer1-this.scrollIncrement;
        this.posContainer2=this.posContainer2-this.scrollIncrement;
    }else{
        if(this.posContainer1>=this.containerSize) {
            this.posContainer1=-this.containerSize;
        }

        if(this.posContainer2>=this.containerSize) {
            this.posContainer2=-this.containerSize;
        }

        this.posContainer1=this.posContainer1+this.scrollIncrement;
        this.posContainer2=this.posContainer2+this.scrollIncrement;
    }

    var myClass=this;

    this.scrollingTimerId=setTimeout(function(){
        myClass.scroll();
    },this.scrollingSpeed);
};

LoopContainerScroller.prototype.getSelectedImage = function (){
    var img=this.list[this.selectedAmbientIndex];

    return img.childNodes[0].childNodes[0].alt;
}

LoopContainerScroller.prototype.setContainerPosition = function (){
    if(this.scrollerOrientation=="VERTICAL"){
        this.container1.style.marginTop=this.posContainer1 + 'px';
        this.container2.style.marginTop=this.posContainer2 + 'px';
    }else{
        this.container1.style.marginLeft=this.posContainer1 + 'px';
        this.container2.style.marginLeft=this.posContainer2 + 'px';
    }
}

LoopContainerScroller.prototype.slide = function (){
    var myClass=this;
    var scroll;

    scroll=this.scrollingOrientation;

    if(scroll<0){
        scroll=0;
    }

    this.startScrolling(scroll);

    this.slideShowTimerId=setTimeout(function(){
        myClass.slide();
    },this.slideShowInterval);
}

LoopContainerScroller.prototype.toggleSlideShow = function (){
    if(!this.slideRunning){
        this.startSlideShow();
    }else{
        this.stopSlideShow();
    }
}

LoopContainerScroller.prototype.startSlideShow = function (){
    if(!this.slideRunning){
        this.slideRunning=true;
        this.slide();
    }
}

LoopContainerScroller.prototype.stopSlideShow = function (){
    this.slideRunning=false;
    clearTimeout(this.slideShowTimerId);
}

LoopContainerScroller.prototype.startScrolling = function (scrollOrientation){
    if(this.container1==null || this.container2==null){
        return;
    }

    if(scrollOrientation!=this.scrollingOrientation){
        this.scrollingOrientation=scrollOrientation;

        if(this.scrollingSpeed==-1){
            this.scrollingSpeed=1;

            this.scroll();
        }else{
            //If we are changing the scroll direction stop scrolling
            this.stopScrolling();
        }
    }else{
        if(this.scrollingSpeed==-1){
            this.scrollingSpeed=1;

            this.scroll();
        }
    //Reduce time interval
    //        this.scrollingSpeed-=1;
    //        if(this.scrollingSpeed<1){
    //            this.scrollingSpeed=1;
    //        }
    }
}

LoopContainerScroller.prototype.stopScrolling = function (){
    if(this.container1==null || this.container2==null){
        return;
    }

    this.scrollingSpeed=-1;
    //    this.scrollingOrientation=-1;

    clearTimeout(this.scrollingTimerId);
}

LoopContainerScroller.prototype.findAmbientImage = function (){
    var itemTop=0;
    var img=null;
    var imgParent=null;
    var index=0;
    var position=0;

    if(this.scrollerOrientation=="VERTICAL"){
        position=this.targetContainer.offsetTop+ this.imageSeparation;
    }else{
        position=this.targetContainer.offsetLeft+ this.imageSeparation;
    }


    for(var i = 0; i < this.list.length; i++){
        img=this.list[i];
        imgParent=img.parentNode;

        if(i>=this.list.length/2){
            index=i % (this.list.length/2);
        }else{
            index=i;
        }

        if(imgParent==this.container1){
            itemTop=this.posContainer1+ index*(this.imageSize + this.imageSeparation);
        }else{
            itemTop=this.posContainer2+ index*(this.imageSize + this.imageSeparation);
        }
        //if(itemTop>=125 && itemTop<=245){
        //if(itemTop==125){
        if(itemTop==position){
            if(i!=this.selectedAmbientIndex){
                if(this.selectedImageContainer!=null){
                    this.selectedImageContainer.alt=img.childNodes[0].childNodes[0].title;
                    this.selectedImageContainer.src=img.childNodes[0].childNodes[0].title;
                }
                this.stopScrolling();
                this.selectedAmbientIndex=i;

                return true;
            }
        }else{
            if(itemTop>position && itemTop<=position + this.scrollIncrement-1){
                //if(itemTop>125 && itemTop<=125+this.scrollIncrement-1){
                //We are moving the container each x>1 increments. We need to
                //recover x-1 px for odd indexes positions.

                if(i!=this.selectedAmbientIndex){
                    if(this.selectedImageContainer!=null){
                        this.selectedImageContainer.alt=img.childNodes[0].childNodes[0].title;
                        this.selectedImageContainer.src=img.childNodes[0].childNodes[0].title;
                    }
                    this.stopScrolling();
                    this.selectedAmbientIndex=i;

                    this.posContainer1-=this.scrollIncrement-1;
                    this.posContainer2-=this.scrollIncrement-1;

                    return true;
                }
            }
        }
    //alert(itemTop);
    }

    return false;
}


//*************************** HORIZONTAL IMAGE SCROLLER ************************
var m=0;
var n=520;
var speed=-1;
var orientation=-1;
var aceleration=1;
function scrollPics() {
    document.getElementById('div1').style.left=m+'px';
    document.getElementById('div2').style.left=n+'px';

    if(orientation==0){
        m--;
        n--;
        if(m<=-520) {
            m=520;
        }
        if(n<=-520) {
            n=520;
        }
    }else{
        m++;
        n++;
        if(m>=520) {
            m=-520;
        }
        if(n>=520) {
            n=-520;
        }
    }
    if(speed<0) speed=28;
    if(aceleration!=0){
        setTimeout('scrollPics()',speed);
    }

}

function startScrolling(ori){
    if(speed>0){
        if(ori!=orientation){
            aceleration=-1;
        }
        else{
            aceleration=1;
        }

        //Increment velocity
        speed=speed-(2*aceleration);

        //Maximum velocity
        if(speed<2) speed=2;

        //Minimum velocity. If reached stop moving.
        if(speed==30) aceleration=0;
    }

    //Orientation changed. Velocity minimum revased.
    if(speed>30){
        orientation=ori;
        aceleration=1;
        speed=28;

        scrollPics();
    }

    /*alert(speed+"/"+aceleration+"/"+orientation);*/
    var divObj = (document.getElementById) ? document.getElementById('divCoatingImagesHelp') : eval("document.all['divCoatingImagesHelp]");

    /*divObj.innerHTML=speed+"/"+aceleration+"/"+orientation;*/
    if(orientation<0){
        orientation=ori;
        scrollPics();
    }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//***************************** OTHER FUNCTIONS ********************************
function StringToXml(text){
    if (window.ActiveXObject){
        var doc=new ActiveXObject('Microsoft.XMLDOM');
        doc.async='false';
        doc.loadXML(text);
    } else {
        var parser=new DOMParser();
        var doc=parser.parseFromString(text,'text/xml');
    }
    return doc 
}

function XmlToString(xmlObject) {
    if (window.ActiveXObject){
        return xmlObject.xml;
    } else {
        var xmlString = (new XMLSerializer()).serializeToString(xmlObject);
        return xmlString;
    }
}


function toggleBetweenDivImage(divName,image1,image2){
    var imgPath = new String();
    imgPath = document.getElementById(divName).style.backgroundImage;

    if(imgPath == "url(" + image1+ ")" || imgPath == "")    {
        document.getElementById(divName).style.backgroundImage = "url(" + image2+ ")";
    }
    else    {
        document.getElementById(divName).style.backgroundImage = "url(" + image1+ ")";
    }
}
function doLimitationTimer(){
    clearTimeout(limitationTimer);
    limitationTimer=null;
}

function obtainXMLElementByName(doc,name){
    var element,child,value='';

    element=doc.getElementsByTagName(name)[0];
    child=element.childNodes[0];
    value=child.nodeValue;

    return value;
}

function getContObj(container){
    var obj;

    obj=(document.getElementById) ? document.getElementById(container) : eval("document.all['" + container + "']");

    if(obj==null){
        alert(container);
    }

    return obj;
}

function startLoading(container){
    if(container!=null){
        container.innerHTML="";
        container.style.background='url(CSS/'+ selectedTheme +'/img/circleLoader.gif)';
        container.style.backgroundPosition = "50% 50%";
        container.style.backgroundRepeat = "no-repeat";
    }
}

function stopLoading(container){
    if(container!=null){
        container.style.background ='none';
    }
}

function containerVisibility(containerName,visible){
    if(visible=='hidden'){
        getContObj(containerName).style.visibility='hidden';
    }else{
        getContObj(containerName).style.visibility='visible';
    }

}


function urlencode(str) {
    str = escape(str);
    str = str.replace('+', '%2B');
    str = str.replace('%20', '+');
    str = str.replace('*', '%2A');
    str = str.replace('/', '%2F');
    str = str.replace('@', '%40');
    return str;
}




function getSelectedOptionFromList(listName){
    var selectedValue;

    list=getContObj(listName);

    selectedValue=list.options[list.selectedIndex].value;

    return selectedValue;
}

function redirect(url) {
    window.location = url ;
}

function valEmail(valor){
    //función javascript que mediante expresiones regulares comprueba si
    //el formato de email es correcto
    re=/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/
    if(!re.exec(valor))
    {
        return false;
    }
    else
    {
        return true;
    }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

$.extend({
    getUrlVars: function(){
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    },
    getUrlVar: function(name){
        return $.getUrlVars()[name];
    }
});


function loadDialog(id, params ) {

    var url = "dialog/" + id + ".html";

    try {
        $.ajax({
            type: "POST",
            url: url,
            success: function(result) {
                prLoadDialog( result, id, params );
            },
            error: function(){
                alert("Error $ajax");
            }
        });
    }
    catch (e) {
        alert(e) ;
    }
}

function prLoadDialog(content, id, params){

    $('#light').html(content) ;

    switch (id) {
        case "dialog_send_link":
            showDialog("auto", "auto", 500, 200, "nomodal");
            
            var name = $(cache_product_xml).find('Product_class').find('name').text();
            $(".name-product").html( name );
            break;
        default:
            break;
    }
}

function showDialog(width, height, left, top, modal) {

    if (modal == "modal") {}
    else
    {
        $('#fade').click(function() {
            hideDialog();
        });
    }

    document.getElementById('light').style.width = width;
    document.getElementById('light').style.height = height;
    document.getElementById('light').style.display='block';
    document.getElementById('fade').style.display='block';

    document.getElementById('light').style.left = left +"px";
    document.getElementById('light').style.top = top + "px";
//$('#slickbox').show('slow') ;
}

function hideDialog() {
    document.getElementById('light').style.display='none';
    document.getElementById('fade').style.display='none'
}


/*
 * Funciones para imagenes de catalogo
 */


function get_image_path_by_rolelist_and_doctype( xml, pc, docrole, doctype ) {

    // findDocumentAssignmentForProductClassAndRole
    var array_da = findDocumentAssignmentForProductClassByRole( xml, pc, docrole );
    var df = null;

    for (var i=0; i<array_da.length; i++) {

        // findDigitalFileByDocumentAssignment
        df_aux = findDigitalFileByDocumentAssignment( xml, array_da[i] );

        // filter df by doctype
        var dt = findDocTypeByDigitalFile(xml, df_aux);
        if (dt == doctype) {
            df = df_aux;
            break;
        }
    }

    // findFileLocationIdentificationByDigitalFile
    var fli = findFileLocationIdentificationByDigitalFile( xml, df );

    // findDocumentPathByFileLocationIdentification
    var path = findDocumentPathByFileLocationIdentification( xml, fli );

    return path;

}


function get_image_path_by_rolelist( xml, pc, docrole ) {

    // findDocumentAssignmentForProductClassAndRole
    var array_da = findDocumentAssignmentForProductClassByRole( xml, pc, docrole );

    // findDigitalFileByDocumentAssignment
    var df = findDigitalFileByDocumentAssignment( xml, array_da[0] );

    // findFileLocationIdentificationByDigitalFile
    var fli = findFileLocationIdentificationByDigitalFile( xml, df );

    // findDocumentPathByFileLocationIdentification
    var path = findDocumentPathByFileLocationIdentification( xml, fli );

    return path;

}


function findDocumentPathByFileLocationIdentification( xml, fli ) {

    var path = null;

    $(xml).find('result').children('File_location_identification').each(function(){
        var fli_xml = $(this).attr('id');

        if ( fli_xml == fli ) {
            var source_id = $(this).find('source_id').text();
            var external_id = $(this).find('external_id').text();
            path = source_id + external_id;
        }
    });

    return path;
}


function findFileLocationIdentificationByDigitalFile( xml, df ) {

    var fli = null;

    $(xml).find('result').find('File_location_identification').each(function(){
        var df_xml = $(this).find('Digital_file').attr('ref');

        if ( df_xml == df ) {
            fli = $(this).attr('id');
        }
    });

    return fli;
}


function findDigitalFileByDocumentAssignment( xml, da ) {

    var df = null;

    $(xml).find('result').children('Document_assignment').each(function(){
        var id = $(this).attr('id');

        if ( id == da ) {
            df = $(this).find('Digital_file').attr('ref');
        }
    });

    return df;
}


function findDocumentAssignmentForProductClassByRole( xml, pc, docrole ) {

    var match_docrole = false;

    var array_da = new Array();
    $(xml).find('result').find('Document_assignment').each(function(){
        match_docrole = false;

        var is_assigned_to = $(this).find('Product_class').attr('ref');
        var role = $(this).find('role').text();

        if (is_assigned_to == pc) {
            array_role = docrole.split("--");
            for (i=0; i<array_role.length; i++) {
                if (array_role[i] == role) {
                    match_docrole = true;
                    break;
                }
            }
            if (match_docrole) {
                var da = $(this).attr('id');
                array_da[array_da.length] = da;
            }
        }
    });

    //    for (i=0; i<array_da.length; i++) {
    //        console.log( array_da[i] );
    //    }

    return array_da;
}


function findDocTypeByDigitalFile( xml, df ) {

    var doctype = null;

    $(xml).find('result').children('Digital_file').each(function(){
        var id = $(this).attr('id');

        if ( id == df ) {
            doctype = $(this).find('contained_data_type').text();
        }
    });

    return doctype;
}


/* Coating2D */
function findDigitalFileByContainedDataType( xml, cdt ) {

    var df = null;

    $(xml).find('result').children('Digital_file').each(function(){
        var id = $(this).attr('id');

        var type = $(this).find('contained_data_type').text();

        if ( type == cdt ) {
            df = id;
        }
    });

    return df;
}


/*
 * jquery lightbox
 */
function img_lightbox( url ) {
    $('#a_lightbox').attr("href", url);
    $('#a_lightbox').lightBox({
        fixedNavigation:true
    });
    $('#a_lightbox').click();
}

function getParams() {
    option = getUrlVars()["option"];
    id_product_acv = getUrlVars()["product"];
    product_pc = getUrlVars()["product"];
    catalogue_name = getUrlVars()["catalogue"];
    favorite = getUrlVars()["favorite"];
    catalogue_name = decodeURIComponent(catalogue_name);
}

function urlwithlang(url) {
    var url = url_web + url + ".jsp?lang=" + selectedLanguage;
    $(location).attr('href',url);
}



function load_xml_multilanguage() {

    var call = new servCall("Retrieve_xml") ;
    call.method = "GET";
    call.arguments.push(new Array('url_xml', url_web + 'xml/interfaceLanguage.xml'));

    var params = new Array(2);
    for (i= 0; i < params.length; ++ i)
        params [i] = new Array(2);
    params[0][0] = "url_serv";
    params[0][1] = url_serv;
    params[1][0] = "func";
    params[1][1] = "load_xml_multilanguage";

    loadXml( call, params );
}


function cb_load_xml_multilanguage(result) {

    xml_multilanguage = result;
//    get_pc_catalogue_id_by_catalogue_name();
//setMultilanguage();
}

function setElementLanguage(idElement, key, idLanguage) {

    //sContact
    $(xml_multilanguage).find('text[languageCode=' + idLanguage + '][key=' + key + ']').each(function(){
        $('#' + idElement).html($(this).text());
    });

}

function getKeyTranslation(key, idLanguage) {

    var str = null;
    $(xml_multilanguage).find('text[languageCode=' + idLanguage + '][key=' + key + ']').each(function(){
        str = $(this).text();
    });

    return str;
}


function load_url_product( product ) {
    $('#myiframe').attr('src', url_web + '?prod=' + product);
}

function desconectarse() {

    var call = new servCall("Login") ;
    call.method = "GET";
    call.arguments.push(new Array('database_id', escape(database_id)));
    call.arguments.push(new Array('action', 'logout'));

    var params = new Array(2);
    for (i= 0; i < params.length; ++ i)
        params [i] = new Array(2);
    params[0][0] = "url_serv";
    params[0][1] = url_serv;
    params[1][0] = "func";
    params[1][1] = "desconectarse";

    loadXml( call, params );

}

function cb_desconectarse(result) {
    var msg = $(result).find("msg").text();

    if (msg == "0") {
        alert(" Desconectado ");
        window.location.href = url_web;
    }
}

function login() {

    var call = new servCall("Login") ;
    call.method = "GET";
    call.arguments.push(new Array('action', 'login'));
    call.arguments.push(new Array('database_id', escape(database_id)));
    call.arguments.push(new Array('mode', 'anonymous'));

    var params = new Array(2);
    for (i= 0; i < params.length; ++ i)
        params [i] = new Array(2);
    params[0][0] = "url_serv";
    params[0][1] = url_serv;
    params[1][0] = "func";
    params[1][1] = "login";

    loadXml( call, params );
}

function goTo(val) {
    window.location.href = "index.jsp?option="+val;
}

function findDfRapport(result, df) {
    //var aip_w = $(result).find('Applied_independent_property described_element Digital_file[ref=' + df + ']').parent().parent().find('name:contains("SPECIFICATION TEXTURE WIDTH")').parent().attr('id');
    var rapport = new Array(2);

    var ip = $(result).find('Applied_independent_property described_element Digital_file[ref=' + df + ']').parent().parent().find('name:contains("SPECIFICATION TEXTURE WIDTH")').parent().find('base_independent_property').attr('ref');
    var r = $(result).find('Independent_property_representation property[ref=' + ip + ']').parent().find('rep').attr('ref');
    var niwu = $(result).find('Representation[id=' + r + '] items Numerical_item_with_unit').attr('ref');
    var value = $(result).find('Numerical_item_with_unit[id=' + niwu + '] value_component any_number_value-wrapper').text();
    rapport[0] = value;

    ip = $(result).find('Applied_independent_property described_element Digital_file[ref=' + df + ']').parent().parent().find('name:contains("SPECIFICATION TEXTURE HEIGHT")').parent().find('base_independent_property').attr('ref');
    r = $(result).find('Independent_property_representation property[ref=' + ip + ']').parent().find('rep').attr('ref');
    niwu = $(result).find('Representation[id=' + r + '] items Numerical_item_with_unit').attr('ref');
    value = $(result).find('Numerical_item_with_unit[id=' + niwu + '] value_component any_number_value-wrapper').text();
    rapport[1] = value;

    return rapport;
}

function replaceAll( text, busca, reemplaza ){
    while (text.toString().indexOf(busca) != -1)
        text = text.toString().replace(busca,reemplaza);
    return text;
}
