/**********************************************************/
/*                         menu                           */
/**********************************************************/

// get all elements within document having a particular class name
function getElementsByClassName(className) {
		var results = new Array();
        var allElements = (document.all) ? document.all : document.getElementsByTagName("*");

        var re = new RegExp("\\b" + className + "\\b");
        for (var i = 0; i < allElements.length; i++) {
            if (re.test(allElements[i].className)) {
                results.push(allElements[i]);
            }
        }
        return results;
    }

// faz aparecer as subopcoes de uma opcao (e esconde as outras)
function unhide(className){
	var items = new Array;
	items = getElementsByClassName('unhidden');
	for (var i = 0; i < items.length; i++) {
		var clas = items[i].className.split(" ");
        items[i].className='menu2 hidden ' + clas[2];
    }

	items.length = 0;
	items = getElementsByClassName(className);
	for (var i = 0; i < items.length; i++) {
        items[i].className=(items[i].className=='menu2 hidden ' + className)?'menu2 unhidden ' + className:'menu2 hidden ' + className;
    }
}


/**********************************************************/
/*                         promocao                       */
/**********************************************************/

function adjustIFrameSize(id) { 
    var myIframe = document.getElementById(id); 
    if (myIframe) { 
        if (myIframe.contentDocument && myIframe.contentDocument.body.scrollHeight) { 
            // W3C DOM iframe document syntax 
            myIframe.height = myIframe.contentDocument.body.scrollHeight; 
        } else if (myIframe.Document && myIframe.Document.body.scrollHeight) { 
            // IE DOM syntax 
            myIframe.height = myIframe.Document.body.scrollHeight; 
        } 
    } 
}
/**********************************************************/
/*               botoes para cima e baixo                 */
/**********************************************************/
var tim;

// ir para cima significa o slide ir para baixo, ou seja, a posicao aumentar
function thumbsUp(flag) {
	if (flag) {
		t = parseInt(document.getElementById("tabThumbs").style.top);
		if (t < 0) {
			t += 10;
			document.getElementById("tabThumbs").style.top = t + 'px';
			tim = window.setTimeout("thumbsUp(1)", 50);
		} else {
			window.clearTimeout(tim);
		}
	} else {
		window.clearTimeout(tim);
	}
}
// ir para baixo significa o slide ir para cima, ou seja, a posicao diminuir
function thumbsDown(flag) {
	if (flag) {
		t = parseInt(document.getElementById("tabThumbs").style.top);
		limite = (parseInt(document.getElementById("tabThumbs").offsetHeight)
					- parseInt(document.getElementById("thumbs").offsetHeight))
					 * -1;
		if (t >= limite) {
			t -= 10;
			document.getElementById("tabThumbs").style.top = t + 'px';
			tim = window.setTimeout("thumbsDown(1)", 50);
		} else {
			window.clearTimeout(tim);
		}
	} else {
		window.clearTimeout(tim);
	}
} 

/**********************************************************/
/*                     utilidades                         */
/**********************************************************/
function listProperties(obj, objName, mostraNulos) {
	var result = "";
	for (var i in obj) {
		if (mostraNulos || (!mostraNulos && obj[i] != null && obj[i] != "" && obj[i] != 0)) {
			result += objName + "." + i + "=" + obj[i] + "\n";
		}
	}
	alert(result);
}

function ok(){
	// não faz nada; dummy
}

function arrayToString(umArray) {
    var output = "";
    if (umArray) {
        output += "["; 
        for (var i in umArray) {
            val = umArray[i]; 
            switch (typeof val) { 
                case ("object"):
                    if (val[0]) { 
                        output += arrayToString(val) + ","; 
                    } else { 
                        output += objectToString(val) + ","; 
                    } 
                    break; 
                case ("string"):
                    output += "'" + encodeURI(val) + "',"; 
                    break; 
                default:
                    output += val + ","; 
            } 
        } 
        output = output.substring(0, output.length-1) + "]"; 
    }
    return output; 
} 

function objectToString(obj) {
    var val, output = ""; 
    if (obj) { 
        output += "{"; 
        for (var i in obj) {
            val = obj[i]; 
            switch (typeof val) { 
                case ("object"): 
                    if (val[0]) {
                        output += i + ":" + arrayToString(val) + ","; 
                    } else { 
                        output += i + ":" + objectToString(val) + ","; 
                    } 
                    break; 
                case ("string"): 
                    output += i + ":'" + encodeURI(val) + "',"; 
                    break; 
                default: 
                    output += i + ":" + val + ","; 
            }
        } 
        output = output.substring(0, output.length-1) + "}";
    } 
    return output; 
} 

function stringToObject(string) { 
    eval("var result = " + decodeURI(string)); 
    return result; 
} 
function stringToArray(string) { 
    eval("var result = " + decodeURI(string)); 
    return result; 
} 

/**********************************************************/
/*                cookies e favoritos                     */
/**********************************************************/
var arrFav = new Array();
var cookieEnabled = false;



// se o xml mudar ha que adicionar aqui as propriedades da foto
function foto(id, src, name, url){//
	this.id = id;
	this.src = src;
	this.name = name;
	this.url = url;//
}


// utility function to retrieve an expiration date in proper 
// format; pass three integer parameters for the number of days, hours, 
// and minutes from now you want the cookie to expire (or negative 
// values for a past date); all three parameters are required, 
// so use zeros where appropriate 
function getExpDate(days, hours, minutes) {
    var expDate = new Date(); 
    if (typeof days == "number" && typeof hours == "number" && 
        typeof minutes == "number") { 
        expDate.setDate(expDate.getDate() + parseInt(days)); 
        expDate.setHours(expDate.getHours() + parseInt(hours)); 
        expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
        return expDate.toUTCString(); 
    } 
} 
// utility function called by getCookie() 
function getCookieVal(offset) { 
    var endstr = document.cookie.indexOf (";", offset); 
    if (endstr == -1) { 
        endstr = document.cookie.length; 
    } 
    return decodeURI(document.cookie.substring(offset, endstr)); 
} 
// primary function to retrieve cookie by name 
function getCookie(name) {
    var arg = name + "="; 
    var alen = arg.length; 
    var clen = document.cookie.length; 
    var i = 0; 
    while (i < clen) { 
        var j = i + alen; 
        if (document.cookie.substring(i, j) == arg) { 
            return getCookieVal(j); 
        } 
        i = document.cookie.indexOf(" ", i) + 1; 
        if (i == 0) break; 
    } 
    return ""; 
} 
// store cookie value with optional details as needed 
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + encodeURI(value) + 
        ((expires) ? "; expires=" + expires : "") + 
        ((path) ? "; path=" + path : "") + 
        ((domain) ? "; domain=" + domain : "") + 
        ((secure) ? "; secure" : ""); 
} 
// remove the cookie by setting ancient expiration date 
function deleteCookie(name,path,domain) {
    if (getCookie(name)) { 
        document.cookie = name + "=" + 
            ((path) ? "; path=" + path : "") + 
            ((domain) ? "; domain=" + domain : "") + 
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    } 
} 

function gravaCookie() {
	if (arrFav.length > 0) {
		dataFim = getExpDate(180, 0, 0);
		for (i=0; i<arrFav.length; i++) {
			delete arrFav[i].ds_RowID; //isto e necessario porque o spry adiciona a propriedade ds_RowID as celulas de arrFav e nos precisamos que a pagina de favoritos, quando carrega o ds1 a partir do array, redefina todos o ds_RowID automaticamente
//			listProperties(arrFav[i]);
		}
		dadosDoCookie = arrayToString(arrFav);
		setCookie("qcfavoritos", dadosDoCookie, dataFim);
	} else {
		deleteCookie("qcfavoritos");	
	}

}
function validaCookies() {
	if (typeof document.cookie == "string") {
		if (document.cookie.length == 0) {
			document.cookie = "test";
			cookieEnabled = (document.cookie == "test");
			document.cookie = "";
		} else {
			cookieEnabled = true;
		}
	}
	return(cookieEnabled);
}

function adFav(fotoName) {
//	alert("entramos em adFav");
	// primeiro procuramos a ver se a foto ja esta adicionada
	existe = false;
//	alert("o array de favoritos tem o tamanho " + arrFav.length);
	for (i = 0; i<arrFav.length; i++) {
//		listProperties(arrFav[i], "favorito"+i);
		if (arrFav[i].name == fotoName) {
			existe = true;	
			break;
		}
	}
	if (existe) {
//		alert("já existe o favorito");
		alert("Adicionou " + fotoName + " aos favoritos!!!");
	} else {
//		alert("ainda nao existe o favorito");
		actualFoto = ds1.getCurrentRow();
		
		var favFoto = new foto();
//		favFoto.id = actualFoto.id;
		favFoto.src = actualFoto.src;
		favFoto.name = actualFoto.name;
		favFoto.url = actualFoto.url;//

		i = arrFav.length;
		arrFav[i] = favFoto;//
		alert("Adicionou " + favFoto.name + " aos favoritos.");
	}
}
// elimina um favorito
function elFav() {
	actualFoto = ds1.getCurrentRow();
	resposta = confirm("Quer retirar " + actualFoto.name + " dos favoritos?");
	if (resposta == true) {
		n = ds1.getCurrentRowNumber();
		w = n;
//		alert("a linha eliminada -> " + n);
		for (i = n + 1; i<arrFav.length; i++) {
//			alert("vamos colocar a foto " + i + " em " + w);
			arrFav[w] = arrFav[i];
			w++;
		}
		arrFav.length = w;
//		alert("o array passa a ter " + w + " de tamanho");
		ds1.setDataFromArray(arrFav);
//		for (i=0;i<arrFav.length;i++){
//			listProperties(ds1.data[i]);
//		}
		if (ds1.getRowCount(false)==0) {
			document.getElementById("thumbs").innerHTML = "";
			document.getElementById("corpo").innerHTML = "N&atilde;o tem favoritos definidos de momento. Nas suas fotografias favoritas clique em [adicionar a favoritos].";
		} else {
			n = n - 1;
//			alert("vamos colocar na linha " + n);
			if (n>0) {
				ds1.setCurrentRowNumber(n);
			} else {
				ds1.setCurrentRowNumber(0);
			}
		}
	}
}


// obtem favoritos a partir do cookie
function obtemFavoritos() {
	if (document.getElementById("favoritos") && !obs1) {
		// depender ds2 de ds1 atraves de um observer
		var obs1 = new Object;
		obs1.onCurrentRowChanged = function(notifier, data) {
//			alert("mudou de foto");
			if(!(ds1.getCurrentRow().url)) {
//				alert("nao ha URL para esta foto");
				document.getElementById("TabbedPanels1").innerHTML="";
			};
		};
		
		obs1.onDataChanged = function(notifier, data) {
/*			if(!(ds1.getCurrentRow().url)) {
				document.getElementById("TabbedPanels1").innerHTML="";
			};*/
			try{
				lixo = ds1.getCurrentRow().url;
			}
			catch(e){
				document.getElementById("TabbedPanels1").innerHTML="";
			}
		};
		ds1.addObserver(obs1);
	}
	
	// passar do cookie para um array
	if (!cookieEnabled){
	//	alert("cookies desactivados");
		if (document.getElementById("favoritos")) {
				document.getElementById("corpo").innerHTML = "Para usar os Favoritos &eacute; necess&aacute;rio o uso de cookies.";
			}
	} else {
		arrFav.length = 0;
		if (!getCookie("qcfavoritos")) {
	//		alert("nao ha favoritos");
			if (document.getElementById("favoritos")) {
				document.getElementById("corpo").innerHTML = "N&atilde;o tem favoritos definidos de momento. Nas suas fotografias favoritas clique em [adicionar a favoritos].";
			}
		}
		else {
	//		alert("Há favoritos");
			cookieText = getCookie("qcfavoritos");
			arrFav = stringToArray(cookieText);
			if (document.getElementById("favoritos")) {
				ds1.setDataFromArray(arrFav);//
//				for (i=0;i<arrFav.length;i++){
//					var row = ds1.getRowByRowNumber(i);
//					listProperties(row);
//				}
			}
		}
	}
}
/**********************************************************/
/*                           main                         */
/**********************************************************/

function inicio() {
	// ajusta o frame da promocao
	adjustIFrameSize('promo');
	// descobrir se os cookies estao disponiveis
	cookieEnabled = validaCookies();
	// obtem os favoritos
	obtemFavoritos();
	
}
window.onload =	inicio;
window.onunload = gravaCookie;