    Encoder = {

        // When encoding do we convert characters into html or numerical entities
        EncodeType : "entity",  // entity OR numerical

        isEmpty : function(val){
            if(val){
                return ((val===null) || val.length==0 || /^\s+$/.test(val));
            }else{
                return true;
            }
        },
        // Convert HTML entities into numerical entities
        HTML2Numerical : function(s){
            var arr1 = new Array('&nbsp;','&iexcl;','&cent;','&pound;','&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&ordf;','&laquo;','&not;','&shy;','&reg;','&macr;','&deg;','&plusmn;','&sup2;','&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;','&sup1;','&ordm;','&raquo;','&frac14;','&frac12;','&frac34;','&iquest;','&agrave;','&aacute;','&acirc;','&atilde;','&Auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&Ouml;','&times;','&oslash;','&ugrave;','&uacute;','&ucirc;','&Uuml;','&yacute;','&thorn;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&divide;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;','&thorn;','&yuml;','&quot;','&amp;','&lt;','&gt;','&oelig;','&oelig;','&scaron;','&scaron;','&yuml;','&circ;','&tilde;','&ensp;','&emsp;','&thinsp;','&zwnj;','&zwj;','&lrm;','&rlm;','&ndash;','&mdash;','&lsquo;','&rsquo;','&sbquo;','&ldquo;','&rdquo;','&bdquo;','&dagger;','&dagger;','&permil;','&lsaquo;','&rsaquo;','&euro;','&fnof;','&alpha;','&beta;','&gamma;','&delta;','&epsilon;','&zeta;','&eta;','&theta;','&iota;','&kappa;','&lambda;','&mu;','&nu;','&xi;','&omicron;','&pi;','&rho;','&sigma;','&tau;','&upsilon;','&phi;','&chi;','&psi;','&omega;','&alpha;','&beta;','&gamma;','&delta;','&epsilon;','&zeta;','&eta;','&theta;','&iota;','&kappa;','&lambda;','&mu;','&nu;','&xi;','&omicron;','&pi;','&rho;','&sigmaf;','&sigma;','&tau;','&upsilon;','&phi;','&chi;','&psi;','&omega;','&thetasym;','&upsih;','&piv;','&bull;','&hellip;','&prime;','&prime;','&oline;','&frasl;','&weierp;','&image;','&real;','&trade;','&alefsym;','&larr;','&uarr;','&rarr;','&darr;','&harr;','&crarr;','&larr;','&uarr;','&rarr;','&darr;','&harr;','&forall;','&part;','&exist;','&empty;','&nabla;','&isin;','&notin;','&ni;','&prod;','&sum;','&minus;','&lowast;','&radic;','&prop;','&infin;','&ang;','&and;','&or;','&cap;','&cup;','&int;','&there4;','&sim;','&cong;','&asymp;','&ne;','&equiv;','&le;','&ge;','&sub;','&sup;','&nsub;','&sube;','&supe;','&oplus;','&otimes;','&perp;','&sdot;','&lceil;','&rceil;','&lfloor;','&rfloor;','&lang;','&rang;','&loz;','&spades;','&clubs;','&hearts;','&diams;');
            var arr2 = new Array('&#160;','&#161;','&#162;','&#163;','&#164;','&#165;','&#166;','&#167;','&#168;','&#169;','&#170;','&#171;','&#172;','&#173;','&#174;','&#175;','&#176;','&#177;','&#178;','&#179;','&#180;','&#181;','&#182;','&#183;','&#184;','&#185;','&#186;','&#187;','&#188;','&#189;','&#190;','&#191;','&#192;','&#193;','&#194;','&#195;','&#196;','&#197;','&#198;','&#199;','&#200;','&#201;','&#202;','&#203;','&#204;','&#205;','&#206;','&#207;','&#208;','&#209;','&#210;','&#211;','&#212;','&#213;','&#214;','&#215;','&#216;','&#217;','&#218;','&#219;','&#220;','&#221;','&#222;','&#223;','&#224;','&#225;','&#226;','&#227;','&#228;','&#229;','&#230;','&#231;','&#232;','&#233;','&#234;','&#235;','&#236;','&#237;','&#238;','&#239;','&#240;','&#241;','&#242;','&#243;','&#244;','&#245;','&#246;','&#247;','&#248;','&#249;','&#250;','&#251;','&#252;','&#253;','&#254;','&#255;','&#34;','&#38;','&#60;','&#62;','&#338;','&#339;','&#352;','&#353;','&#376;','&#710;','&#732;','&#8194;','&#8195;','&#8201;','&#8204;','&#8205;','&#8206;','&#8207;','&#8211;','&#8212;','&#8216;','&#8217;','&#8218;','&#8220;','&#8221;','&#8222;','&#8224;','&#8225;','&#8240;','&#8249;','&#8250;','&#8364;','&#402;','&#913;','&#914;','&#915;','&#916;','&#917;','&#918;','&#919;','&#920;','&#921;','&#922;','&#923;','&#924;','&#925;','&#926;','&#927;','&#928;','&#929;','&#931;','&#932;','&#933;','&#934;','&#935;','&#936;','&#937;','&#945;','&#946;','&#947;','&#948;','&#949;','&#950;','&#951;','&#952;','&#953;','&#954;','&#955;','&#956;','&#957;','&#958;','&#959;','&#960;','&#961;','&#962;','&#963;','&#964;','&#965;','&#966;','&#967;','&#968;','&#969;','&#977;','&#978;','&#982;','&#8226;','&#8230;','&#8242;','&#8243;','&#8254;','&#8260;','&#8472;','&#8465;','&#8476;','&#8482;','&#8501;','&#8592;','&#8593;','&#8594;','&#8595;','&#8596;','&#8629;','&#8656;','&#8657;','&#8658;','&#8659;','&#8660;','&#8704;','&#8706;','&#8707;','&#8709;','&#8711;','&#8712;','&#8713;','&#8715;','&#8719;','&#8721;','&#8722;','&#8727;','&#8730;','&#8733;','&#8734;','&#8736;','&#8743;','&#8744;','&#8745;','&#8746;','&#8747;','&#8756;','&#8764;','&#8773;','&#8776;','&#8800;','&#8801;','&#8804;','&#8805;','&#8834;','&#8835;','&#8836;','&#8838;','&#8839;','&#8853;','&#8855;','&#8869;','&#8901;','&#8968;','&#8969;','&#8970;','&#8971;','&#9001;','&#9002;','&#9674;','&#9824;','&#9827;','&#9829;','&#9830;');
            return this.swapArrayVals(s,arr1,arr2);
        },

        // Convert Numerical entities into HTML entities
        NumericalToHTML : function(s){
            var arr1 = new Array('&#160;','&#161;','&#162;','&#163;','&#164;','&#165;','&#166;','&#167;','&#168;','&#169;','&#170;','&#171;','&#172;','&#173;','&#174;','&#175;','&#176;','&#177;','&#178;','&#179;','&#180;','&#181;','&#182;','&#183;','&#184;','&#185;','&#186;','&#187;','&#188;','&#189;','&#190;','&#191;','&#192;','&#193;','&#194;','&#195;','&#196;','&#197;','&#198;','&#199;','&#200;','&#201;','&#202;','&#203;','&#204;','&#205;','&#206;','&#207;','&#208;','&#209;','&#210;','&#211;','&#212;','&#213;','&#214;','&#215;','&#216;','&#217;','&#218;','&#219;','&#220;','&#221;','&#222;','&#223;','&#224;','&#225;','&#226;','&#227;','&#228;','&#229;','&#230;','&#231;','&#232;','&#233;','&#234;','&#235;','&#236;','&#237;','&#238;','&#239;','&#240;','&#241;','&#242;','&#243;','&#244;','&#245;','&#246;','&#247;','&#248;','&#249;','&#250;','&#251;','&#252;','&#253;','&#254;','&#255;','&#34;','&#38;','&#60;','&#62;','&#338;','&#339;','&#352;','&#353;','&#376;','&#710;','&#732;','&#8194;','&#8195;','&#8201;','&#8204;','&#8205;','&#8206;','&#8207;','&#8211;','&#8212;','&#8216;','&#8217;','&#8218;','&#8220;','&#8221;','&#8222;','&#8224;','&#8225;','&#8240;','&#8249;','&#8250;','&#8364;','&#402;','&#913;','&#914;','&#915;','&#916;','&#917;','&#918;','&#919;','&#920;','&#921;','&#922;','&#923;','&#924;','&#925;','&#926;','&#927;','&#928;','&#929;','&#931;','&#932;','&#933;','&#934;','&#935;','&#936;','&#937;','&#945;','&#946;','&#947;','&#948;','&#949;','&#950;','&#951;','&#952;','&#953;','&#954;','&#955;','&#956;','&#957;','&#958;','&#959;','&#960;','&#961;','&#962;','&#963;','&#964;','&#965;','&#966;','&#967;','&#968;','&#969;','&#977;','&#978;','&#982;','&#8226;','&#8230;','&#8242;','&#8243;','&#8254;','&#8260;','&#8472;','&#8465;','&#8476;','&#8482;','&#8501;','&#8592;','&#8593;','&#8594;','&#8595;','&#8596;','&#8629;','&#8656;','&#8657;','&#8658;','&#8659;','&#8660;','&#8704;','&#8706;','&#8707;','&#8709;','&#8711;','&#8712;','&#8713;','&#8715;','&#8719;','&#8721;','&#8722;','&#8727;','&#8730;','&#8733;','&#8734;','&#8736;','&#8743;','&#8744;','&#8745;','&#8746;','&#8747;','&#8756;','&#8764;','&#8773;','&#8776;','&#8800;','&#8801;','&#8804;','&#8805;','&#8834;','&#8835;','&#8836;','&#8838;','&#8839;','&#8853;','&#8855;','&#8869;','&#8901;','&#8968;','&#8969;','&#8970;','&#8971;','&#9001;','&#9002;','&#9674;','&#9824;','&#9827;','&#9829;','&#9830;');
            var arr2 = new Array('&nbsp;','&iexcl;','&cent;','&pound;','&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&ordf;','&laquo;','&not;','&shy;','&reg;','&macr;','&deg;','&plusmn;','&sup2;','&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;','&sup1;','&ordm;','&raquo;','&frac14;','&frac12;','&frac34;','&iquest;','&agrave;','&aacute;','&acirc;','&atilde;','&Auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&Ouml;','&times;','&oslash;','&ugrave;','&uacute;','&ucirc;','&Uuml;','&yacute;','&thorn;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&divide;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;','&thorn;','&yuml;','&quot;','&amp;','&lt;','&gt;','&oelig;','&oelig;','&scaron;','&scaron;','&yuml;','&circ;','&tilde;','&ensp;','&emsp;','&thinsp;','&zwnj;','&zwj;','&lrm;','&rlm;','&ndash;','&mdash;','&lsquo;','&rsquo;','&sbquo;','&ldquo;','&rdquo;','&bdquo;','&dagger;','&dagger;','&permil;','&lsaquo;','&rsaquo;','&euro;','&fnof;','&alpha;','&beta;','&gamma;','&delta;','&epsilon;','&zeta;','&eta;','&theta;','&iota;','&kappa;','&lambda;','&mu;','&nu;','&xi;','&omicron;','&pi;','&rho;','&sigma;','&tau;','&upsilon;','&phi;','&chi;','&psi;','&omega;','&alpha;','&beta;','&gamma;','&delta;','&epsilon;','&zeta;','&eta;','&theta;','&iota;','&kappa;','&lambda;','&mu;','&nu;','&xi;','&omicron;','&pi;','&rho;','&sigmaf;','&sigma;','&tau;','&upsilon;','&phi;','&chi;','&psi;','&omega;','&thetasym;','&upsih;','&piv;','&bull;','&hellip;','&prime;','&prime;','&oline;','&frasl;','&weierp;','&image;','&real;','&trade;','&alefsym;','&larr;','&uarr;','&rarr;','&darr;','&harr;','&crarr;','&larr;','&uarr;','&rarr;','&darr;','&harr;','&forall;','&part;','&exist;','&empty;','&nabla;','&isin;','&notin;','&ni;','&prod;','&sum;','&minus;','&lowast;','&radic;','&prop;','&infin;','&ang;','&and;','&or;','&cap;','&cup;','&int;','&there4;','&sim;','&cong;','&asymp;','&ne;','&equiv;','&le;','&ge;','&sub;','&sup;','&nsub;','&sube;','&supe;','&oplus;','&otimes;','&perp;','&sdot;','&lceil;','&rceil;','&lfloor;','&rfloor;','&lang;','&rang;','&loz;','&spades;','&clubs;','&hearts;','&diams;');
            return this.swapArrayVals(s,arr1,arr2);
        },


        // Numerically encodes all unicode characters
        numEncode : function(s){

            if(this.isEmpty(s)) return "";

            var e = "";
            for (var i = 0; i < s.length; i++)
            {
                var c = s.charAt(i);
                if (c < " " || c > "~")
                {
                    c = "&#" + c.charCodeAt() + ";";
                }
                e += c;
            }
            return e;
        },

        // HTML Decode numerical and HTML entities back to original values
        htmlDecode : function(s){

            var c,m,d = s;

            if(this.isEmpty(d)) return "";

            // convert HTML entites back to numerical entites first
            d = this.HTML2Numerical(d);

            // look for numerical entities &#34;
            arr=d.match(/&#[0-9]{1,5};/g);

            // if no matches found in string then skip
            if(arr!=null){
                for(var x=0;x<arr.length;x++){
                    m = arr[x];
                    c = m.substring(2,m.length-1); //get numeric part which is refernce to unicode character
                    // if its a valid number we can decode
                    if(c >= -32768 && c <= 65535){
                        // decode every single match within string
                        d = d.replace(m, String.fromCharCode(c));
                    }else{
                        d = d.replace(m, ""); //invalid so replace with nada
                    }
                }
            }

            return d;
        },

        // encode an input string into either numerical or HTML entities
        htmlEncode : function(s,dbl){

            if(this.isEmpty(s)) return "";

            // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
            dbl = dbl | false; //default to prevent double encoding

            // if allowing double encoding we do ampersands first
            if(dbl){
                if(this.EncodeType=="numerical"){
                    s = s.replace(/&/g, "&#38;");
                }else{
                    s = s.replace(/&/g, "&amp;");
                }
            }

            // convert the xss chars to numerical entities ' " < >
            s = this.XSSEncode(s,false);

            if(this.EncodeType=="numerical" || !dbl){
                // Now call function that will convert any HTML entities to numerical codes
                s = this.HTML2Numerical(s);
            }

            // Now encode all chars above 127 e.g unicode
            s = this.numEncode(s);

            // now we know anything that needs to be encoded has been converted to numerical entities we
            // can encode any ampersands & that are not part of encoded entities
            // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
            // I am going to use a placeholder

            // if we don't want double encoded entities we ignore the & in existing entities
            if(!dbl){
                s = s.replace(/&#/g,"##AMPHASH##");

                if(this.EncodeType=="numerical"){
                    s = s.replace(/&/g, "&#38;");
                }else{
                    s = s.replace(/&/g, "&amp;");
                }

                s = s.replace(/##AMPHASH##/g,"&#");
            }

            // replace any malformed entities
            s = s.replace(/&#\d*([^\d;]|$)/g, "$1");

            if(!dbl){
                // safety check to correct any double encoded &amp;
                s = this.correctEncoding(s);
            }

            // now do we need to convert our numerical encoded string into entities
            if(this.EncodeType=="entity"){
                s = this.NumericalToHTML(s);
            }

            return s;
        },

        // Encodes the basic 4 characters used to malform HTML in XSS hacks
        XSSEncode : function(s,en){
            if(!this.isEmpty(s)){
                en = en || true;
                // do we convert to numerical or html entity?
                if(en){
                    s = s.replace(/\'/g,"&#39;"); //no HTML equivalent as &apos is not cross browser supported
                    s = s.replace(/\"/g,"&quot;");
                    s = s.replace(/</g,"&lt;");
                    s = s.replace(/>/g,"&gt;");
                }else{
                    s = s.replace(/\'/g,"&#39;"); //no HTML equivalent as &apos is not cross browser supported
                    s = s.replace(/\"/g,"&#34;");
                    s = s.replace(/</g,"&#60;");
                    s = s.replace(/>/g,"&#62;");
                }
                return s;
            }else{
                return "";
            }
        },

        // returns true if a string contains html or numerical encoded entities
        hasEncoded : function(s){
            if(/&#[0-9]{1,5};/g.test(s)){
                return true;
            }else if(/&[A-Z]{2,6};/gi.test(s)){
                return true;
            }else{
                return false;
            }
        },

        // will remove any unicode characters
        stripUnicode : function(s){
            return s.replace(/[^\x20-\x7E]/g,"");

        },

        // corrects any double encoded &amp; entities e.g &amp;amp;
        correctEncoding : function(s){
            return s.replace(/(&amp;)(amp;)+/,"$1");
        },


        // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
        swapArrayVals : function(s,arr1,arr2){
            if(this.isEmpty(s)) return "";
            var re;
            if(arr1 && arr2){
                //ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
                // array lengths must match
                if(arr1.length == arr2.length){
                    for(var x=0,i=arr1.length;x<i;x++){
                        re = new RegExp(arr1[x], 'g');
                        s = s.replace(re,arr2[x]); //swap arr1 item with matching item from arr2
                    }
                }
            }
            return s;
        },

        inArray : function( item, arr ) {
            for ( var i = 0, x = arr.length; i < x; i++ ){
                if ( arr[i] === item ){
                    return i;
                }
            }
            return -1;
        }
    }

    function showPreview(imagePath,imageIndex){
		var subImages = document.getElementById('previewPane').getElementsByTagName('IMG');
		if(subImages.length==0){
			var img = document.createElement('IMG');
			document.getElementById('previewPane').appendChild(img);
		}else img = subImages[0];

		document.getElementById('largeImageCaption').style.display='none';
		img.onload = function() { hideWaitMessageAndShowCaption(imageIndex-1); };
		img.src = imagePath;

		document.getElementById('currentPhotoId').value=imageIndex;
	}
	function hideWaitMessageAndShowCaption(imageIndex)
	{
		var imageGalleryObj = false;
		var imageGalleryCaptions = new Array();
		imageGalleryObj = document.getElementById('galleryContainer');

		var divs = imageGalleryObj.getElementsByTagName('DIV');
		for(var no=0;no<divs.length;no++){
			if(divs[no].className=='imageCaption')imageGalleryCaptions[imageGalleryCaptions.length] = divs[no].innerHTML;
		}
		document.getElementById('largeImageCaption').innerHTML = imageGalleryCaptions[imageIndex];
		document.getElementById('largeImageCaption').style.display='block';

		var subImages = document.getElementById('previewPane').getElementsByTagName('IMG');
		if(subImages.length==0){
			var img = document.createElement('IMG');
			document.getElementById('previewPane').appendChild(img);
		}else img = subImages[0];

        // or to set it to encode to html entities e.g & instead of &
        Encoder.EncodeType = "entity";

        // Decode the now encoded text
        var altText = Encoder.htmlDecode(imageGalleryCaptions[imageIndex]);

        img.alt = altText;
        img.title = altText;
	}

	/**
	Author           - Manish Kumar
	Created Date     - 15 June 2009
	Purpose          - To move next
	*/
	function moveNext(serverURL)
	{
        var currentPhotoPos = document.getElementById('currentPhotoId').value;
        var totalPhotoCount = parseInt(document.getElementById('totalPhotoCount').value);
        var nextPhotoPos 	= (parseInt(currentPhotoPos) < totalPhotoCount)?(parseInt(currentPhotoPos)+1):1;

        var nextPhotoDbId 	= mycarousel_itemList[nextPhotoPos-1].photoId;
        var nextPhotoSrc 	= mycarousel_itemList[nextPhotoPos-1].photoSrc;

        var finalPath 		= "http://images.desimartini.com/user_uploads/user/album/525_525/"+nextPhotoSrc;

        showPreview(finalPath,nextPhotoPos);
        makePOSTRequest(serverURL+'sectionwidgets/htcity/front/widgetPhotoComment.php','photoId='+nextPhotoDbId,'listing');
        makePOSTRequest(serverURL+'sectionwidgets/htcity/front/widgetPageThreePaging.php','photoId='+nextPhotoDbId,'page3paging');
        sethidPhotoId(nextPhotoDbId);
	}

	/**
	Author           - Manish Kumar
	Created Date     - 15 June 2009
	Purpose          - To move back
	*/
	function movePrevious(serverURL)
	{
        var currentPhotoPos   = document.getElementById('currentPhotoId').value;
        var totalPhotoCount   = parseInt(document.getElementById('totalPhotoCount').value);
        var previousPhotoPos  = (parseInt(currentPhotoPos)<=1)?parseInt(totalPhotoCount):(parseInt(currentPhotoPos)-1);

        var previousPhotoDbId = mycarousel_itemList[previousPhotoPos-1].photoId;
        var previousPhotoSrc  = mycarousel_itemList[previousPhotoPos-1].photoSrc;

        var finalPath  = "http://images.desimartini.com/user_uploads/user/album/525_525/"+previousPhotoSrc;

        showPreview(finalPath,previousPhotoPos);
        makePOSTRequest(serverURL+'sectionwidgets/htcity/front/widgetPhotoComment.php','photoId='+previousPhotoDbId,'listing');
        makePOSTRequest(serverURL+'sectionwidgets/htcity/front/widgetPageThreePaging.php','photoId='+previousPhotoDbId,'page3paging');
        sethidPhotoId(previousPhotoDbId);
	}	